vector
#include <vector>
# vector就是动态数组
vector<int> vec; # 初始化
vector<int> vec(n, -1); # n个元素全是-1
vec.size()
for(auto it = vec.begin(); it != vec.end(); it++) { # 遍历
cout << *it;
}
for(auto i: vec) {
cout << i;
}
for(auto it = vec.rbegin(); it != vec.rend(); it++ { # 倒序遍历
cout << *it;
}
vec.push_back(1); # 末尾增
vec.insert(vec.end(), vec.begin(), vec.end()); # 插入
vec.insert(<where>, <first>, <last>);
vec.erase(vec.begin(), vec.end()); # 删, 末尾不包括
vec.erase(vec.begin()); # 删
# erase没有其他重载
swap(vec[0], vec[1]); # 改, 交换
vec[0] vec.at(0) vec.front() # 查
vec.back() # 不移除,不能赋值
sort(vec.begin(), vec.end(), [](int a, int b) -> bool { # 排序<algorithm> 快速排序 原地
return a > b;
});
find(vec.begin(), vec.end(), 3); # 查找元素,返回迭代器,找不到返回end()
array
array<int, 5> arr = {1, 2, 3, 4, 5};
map
map是有序的,关于key升序排序
map是红黑树
map<int, int> mp; # 初始化
mp[2]++; # 直接初始化成0值
mp.size() # 元素个数
mp.count(1); # 查
for(auto it = mp.begin(); it != mp.end(); it++) { # 遍历
cout << it -> first;
cout << it -> second;
}
for(auto it: mp) {
cout << it.first;
cout << it.second;
}
mp.find(2); # 根据key查找,返回迭代器,找不到返回end()
it = mp.erase(2); # 可根据键值和迭代器移除,返回下一个迭代器
it = mp.erase(it);
string
string str = "Hello world!"; # 初始化
string str(9, '.'); # 初始化
str.size();
str.push_back('a'); # 增
str.erase(5, 1); # 删, 索引5去除1个
reverse(str.begin(), str.end()); # 反转字符串, 原地修改
str.back(); # 返回str最后一个字符,不移除
str.front(); # 返回str第一个字符,不移除
count(str.begin(), str.end(), '1'); # 查
str.pop_back(); # 移除最后一个字符,不返回
sub = str.substr(2); # 从索引2开始,到末尾
sub = str.substr(2, 5); # 从索引2开始,长度为5
pair
# pair大小比较:先比较first,再比较second
pair<int, int> pr(0, 1);
make_pair(0, 1);
int a = pr.first, b = pr.second; # 访问元素
tuple
#include <tuple>
tuple<int, int, int> tp(0, 1, 2);
make_tuple(0, 1, 2);
int a = get<0>(tp); # 访问元素
queue
#include <queue>
queue<int> que; # 初始化
que.pop(); # 移除队首元素,不返回
que.top(); # 返回队首元素,不移除,不能赋值
if(que.empty()) # 判断是否为空
priority_queue
#include <queue>
# priority_queue默认是大根堆
struct Com {
bool operator()(const pr& a, const pr& b) {
return a.first > b.first; # true返回第零个参数a
}
};
priority_queue<pr, vector<pr>, Com> que;
priority_queue<int, vector<int>, greater<int>> A;
priority_queue<int, vector<int>, less<int>> B;
stack
sta.empty() # 是否为空
sta.pop() # 不返回值
sta.top() # 返回元素, 不能赋值
set
set是红黑树
unordered_set
unordered_set<int> ust; # 初始化
unordered_set<int> ust(vec.begin(), vec.end());
ust.insert(1); # 增
ust.clear(); # 删
ust.erase(1); # 删
ust.count(1); # 查
stringstream
#include <sstream>
vector<int> vec;
string input;
cin >> input;
stringstream ss(input);
string tmp;
while (getline(ss, tmp, ',')) {
vec.push_back(stoi(tmp));
}