-
1、vector
- 倍增自变长数组,插入均摊o(1)
- size() 返回元素个数
- empty() 判断是否为空
- clear() 清空
- front()/back() 返回第一/最后一个数
- push_back()/pop_back() 添加/删除元素
- begin()/end() 首/尾迭代器
- 遍历方式
for(int i=0;i<s.size();i++)cout<<a[i]<<' ';
for(auto x:s)cout<<x<<' ';
for(vector<int>::iterator i=s.begin();i<s,end();i++)
cout<<*i<<' ';
vector<int>(4,3) < vector<int>(3,4);
- [ ]可以取值
-
2、pair
- 存储一个任意类型的二元组
- 用first调用第一个元素,second调用第二个元素
- 支持按字典序比较pair大小首先依据first然后依据second,可以sort排序
- pair的赋值方式
pair<int,string>p
p=make_pair(10,zjk);
p={10,zjk};
-
3、string
- size()/length() 返回元素个数
- empty() 返回字符串是否为空
- clear() 清空字符串
- 支持在定义的字符串后面直接添加字符串或者字符
string a;
cin>>a;
a+='a';
a+="abc";
- 常用函数substr(起始位置(从0开始),子串长度(超过母串长度输出到最后为止省略掉该参数,返回从起始位置到最后的所有字符))
string a="abcdefg"
cout<<substr(3,3)<<endl;
- 常用函数c_str()返回string对应字符串的起始位置方便用printf输出
string a="abcdefg";
printf("%s",a.c_str());
- to_string()将一个数字变成对应的字符串
-
4、queue
- push() 向队尾插入一个元素
- front() 返回队头元素
- back() 返回队尾元素
- pop() 弹出删除队头元素
- size() 返回元素个数
- empty() 判断是否为空
- 没有clear()和priority_queue,stack一样,想清空这些直接重新定义一个就好了
queue<int>q;
q.push(1);
q=queue<int>();
-
5、priority_queue
- push() 插入一个元素
- top() 返回堆顶元素
- pop() 弹出删除堆顶元素
- 默认是大根堆,要想换成小根堆插入的时候直接插入-x就好,-x从大到小就是x从小到大输出-1*top()
- 或者直接定义小根堆
priority_queue<int>heap
priority_queue<int,vector<int>,greater<int>>heap
-
6、stack
- push() 向栈顶插入一个元素
- top() 输出栈顶元素
- pop() 弹出删除栈顶元素
- size() 返回元素个数
- empty() 判断是否为空
-
deque
- size() 返回元素个数
- empty() 判断是否为空
- clear() 清空双端队列
- front() 返回第一个元素
- back() 返回最后一个元素
- push_back()/pop_back() 在队尾插入/弹出一个元素
- push_front()/pop_front() 在队首插入/弹出一个元素
- begin()/end() 首/尾迭代器
- [ ]可以取值
- 效率较低
-
7、set
- 增删改查logn
- set库函数包含set和multiset
- set里面插入重复元素会被忽略,multiset里面可以有重复元素
- size() 返回元素个数
- empty() 判断是否为空
- clear() 清空集合
- begin()/end() 首/尾迭代器
- insert() 插入一个数
- find() 查找一个数,返回该数出现的迭代器,要是最后没找到返回end(),取地址输出元素值
- count() 返回一个数出现的次数
- erase() 要是输入一个数删除所有该数o(k+logn)k是该元素个数,要是输入一个迭代器,删除该迭代器
- lower_bound()/upper_bound() 返回大于等于x的第一个元素的迭代器,返回大于x的第一个元素的迭代器,取地址得值
-
8、map
- 增删改查logn
- map库函数包括map和multimap
- size() 返回元素组个数
- empty() 判断是否为空
- clear() 清空map
- insert() 插入一组数({ })
- erase() 删除pair或者迭代器
- find() 查找一个数,返回该数出现的迭代器,要是最后没找到返回end(),取地址输出元素值
- [ ]可以取值 o(logn)
- lower_bound()/upper_bound()
-
9、unordered_map、unordered_multimap、unordered_set、unordered_multiset
- 增删改查都是o(1)但是因为内部无序不支持lower_bound()和upper_bound()操作
- 不支持迭代器的加加减减,和排序有关的都不支持
-
10、bitset
- 压位,开一个10000X10000的bool数组不能直接开要压位
- 定义bitset<10000>s;
- 支持 | & ^ ~ != == >> << [ ]
- count() 返回有多少个1
- any() 判断是否至少有一个1
- none() 判断是否全为0
- set() 把所有位置成1
- set(k,v) 将第k位变成v
- reset() 把所有位变成0
- flip() 把所有位取反
- flip(k) 把第k位取反
-
2021-07-13写于南宁