其实是因为开始学的时候我在上实验课,没带笔记本,还要躲避老师,遂做此篇。
输入输出
输入:cin>>a;
输出:cout<<a<<endl;
string
string s;
cin >> s;
整行输入:getline(cin, s);
cout << s.size() << “\n”; // 输出字符串长度
cout << s.substr(1, 2) << “\n”; // 从索引1开始取2个字符的子串
s=s1+s2;//自动扩容
string s = “abracadabra”;
cout << s.find(“ra”); // 2,查找
if (s.find(“xyz”) == string::npos) { … }//没找到
- 自动扩容(char[] 一旦满了就炸)
- 能直接拼接:
s + "bc" - 能获取长度:
s.size() - 子串:
s.substr() - 查找:
s.find("abc") - 排序:sort(s.begin(),s.end());
结构体
struct Node {
int x;
void print() { cout << x; } // 居然可以放函数吗。。。
};
struct Node{
int x;
void printf() {cin>>x;}
};
int main(){
Node n;
n.x=2;
n.printf();\\调用结构体里的函数
cout<<n.x<<“\n”;
}
函数
void add(int &x) {
x++;
}//不用指针了
内存管理
malloc->new
free->delete
vector(动态数组)
·vector <int> v; // 一个空的动态数组
v.push_back(10); // 在末尾插入 10
v.push_back(20);
cout << v[0] << ” ” << v.size() << “\n”;
v.pop_back(); // 删除最后一个元素
·for (auto &x : v) // 范围 for,auto &x 表示“引用遍历”
cout << x << ” “;
·vector <int>a;
a.reserve(1000000); // 提前开 100w 空间,提高 push_back 效率
在末尾加上一个元素:push_back();
删除最后一个元素:pop_back();
遍历数组:for(auto &x:v)
for (auto it = v.begin(); it != v.end(); it++)//auto类似于指针
添加元素:a.insert(a.begin()+2, 9);//在第三个元素位置添加9
删除元素:a.erase(a.begin()+3);//删除第四个元素
开空间:a.reserve(1000000);
初始化:vector s(n + 1, 0);//初始化个数为n+1的s都为0
pair 与 vector<pair<...>>
int main() {
pair p = {3, 5}; // 一个包含两个整数的容器
cout << p.first << ” ” << p.second << “\n”;
}
pair<int,int>保存两个相关联的值,前面的是first,后面是second
int main(){
vector<pair<int,int>> edges;// 存边(值, 下标)或(权重, 目标)
edges.push_back({1, 2});
edges.emplace_back(3, 4); // emplace_back 更高效(原地构造)
for (auto &e : edges)
cout << e.first << ” ” << e.second << “\n”;
return 0;
}
push_back和emplace_back都是在vector末尾加元素的函数
sort
数组:eg:sort(a,a+4);
升序:sort(a.begin(), a.end());
降序: sort(v.begin(), v.end(), greater<int>());
pair:vector<pair<int,int>>v={……}; sort(v.begin(),v.end());
list
·list<int> a;//设置了一个链表
a.push_back(10);
a.push_back(20);//在末尾插入
·a.push_front(5)//在最前面插入
·a.pop_back()//删除末尾
a.pop_front()//删除头
·auto it = a.begin(); // 指向第一个节点
advance(it, 1); // it 移动 1 步(即第二个位置)
a.insert(it, 100); // 在第二个节点“前”插入 100//和vector好像但他快点
·auto it = a.begin();
advance(it, 2);
a.erase(it); // 删除第三个元素
·a.remove(10); // 删除所有值 == 10 的节点
·a.sort(); // 默认升序
a.sort(greater<int>()); // 降序
·a.reverse();//翻转
插入:push_back、push_front、insert()
删除:pop_front、pop_back、erase()
排序:a.sort;
翻转:a.reverse();
queue/deque(默认用deque)
queue <int> q;//设置队列
q.push(10);
q.push(20);//入队
q.front(); //队头元素
q.pop(); // 删除队头元素
q.back(); // 队尾元素
q.empty()//判断队伍是否为空
q.size();//元素个数
int x = q.front();
q.pop();//pop没有返回值,表达出队元素就是如此
queue <int> tmp = q;
while (!tmp.empty()) {
cout << tmp.front() << endl;
tmp.pop();
}//遍历只能如此
//这个不能随机访问
push() — 入队
pop() — 出队
front() — 队头
back() — 队尾
empty() — 是否为空
size() — 大小
dq[i];//返回队头
dq.front();//返回队头
dq.back()//返回队尾
dq.pop_back()//删除队尾
dq.pop_front()//删除队头
dq.push_back(e)//队尾加e
dq.push_front(e)//队头加e
stack
| 操作 | 作用 |
|---|---|
push(x) | 入栈(放一个元素到顶部) |
pop() | 出栈(把顶部移除) |
top() | 查看顶部元素(但不删除) |
empty() | 是否为空 |
size() | 元素个数 |
哇,AuCu姐姐好厉害
哇,AuCu小姐好棒啊!!!
我求你了