👉 “Offer 驾到,掘友接招!我正在参与2022春招打卡活动点击查看 活动详情。
本文已参与「新人创作礼」活动,一起开启掘金创作之路。
STL常见容器API总结
vector,变长泛型数组,常用函数
- size() 返回元素个数
- empty() 返回是否为空
- clear() 清空
- front()/back()
- push_back()/pop_back()
- begin()/end() 迭代器,返回指针
- []
- insert() 指定位置插入元素
vector<int> a(n); // 定义长度为 n 的 vector,初始值默认为0
vector<int> a(10, 1); // 长度为 10 的 vector ,所有元素都是 3
string, 字符串类
- size()/length() 返回字符串长度,注意size()返回的是unsigned int
- empty() 判空
- clear() 清空
- substr() 返回子串,第一个参数为起始位置,第二个参数时子串的长度,与java等其他语言不同
- find() 查找字符串/字符是否存在,存在返回第一次出现的下标起始值
- find_first_of() 查找字符第一次出现的位置
- find_last_of() 查找字符最后一次出现的位置
stack, 栈
- size()
- empty()
- push() 向栈顶插入一个元素
- top() 返回栈顶元素
- pop() 弹出栈顶元素
queue, 队列
- size()
- empty()
- push() 向队尾插入一个元素
- front() 返回队头元素
- back() 返回队尾元素
- pop() 弹出队头元素
deque, 双端队列
- size()
- empty()
- clear()
- front()/back()
- push_back()/pop_back()
- push_front()/pop_front()
- begin()/end()
- []
priority_queue, 优先队列,默认是大根堆
- size()
- empty()
- push() 插入一个元素
- top() 返回堆顶元素
- pop() 弹出堆顶元素
//若要使用小根堆,可以将元素取为负数再push到大根堆中,或者采用以下定义方式
// 定义小根堆
priority_queue<int, vector<int>, greater<int>> pq; // less<int> 大根堆
set, map, 基于红黑树
- size()
- empty()
- clear()
- begin()/end()
- ++, -- 返回前驱和后继,时间复杂度 O(logn)
判断 set<int> st 是否存在值,用 st.find(key) != st.end() or st.count(key),存在的话,是不等于。
PS:注意关联容器中的key都是const类型,即不能直接修改key,如果需要修改key,需要先删除以后再插入
set/multiset
-
insert() 插入一个数
-
find() 查找一个数
-
count() 返回某一个数的个数
-
erase()
- 输入是一个数x,删除所有
x - 输入一个迭代器,删除这个迭代器
- 输入是一个数x,删除所有
-
lower_bound()/upper_bound()
- lower_bound(x) 返回大于等于x的最小的数的迭代器
- upper_bound(x) 返回大于x的最小的数的迭代器
set里面不能有重复元素,multiset可以。
map/multimap
- insert() 插入的数是一个pair
- erase() 输入的参数是pair或者迭代器
- find()
- [] 注意multimap不支持此操作。 时间复杂度是 O(logn)
- lower_bound()/upper_bound()
判断 map<int, int> mp是否存在键值,用 mp.count(key)
bitset, 位图
bitset<10005> s;~, &, |, ^>>, <<==, !=[]- count() 返回有多少个1
- any() 判断是否至少有一个1
- none() 判断是否全为0
- set() 把所有位置成1
- set(k, v) 将第k位变成v
- reset() 把所有位变成0
- flip() 等价于~取反
- flip(k) 把第k位取反