STL
vector
vector
变长数组
因为系统为某一程序分配空间时,所需时间与空间大小无关,与申请次数有关。
所以vector时间复杂度的优化是减少申请的次数,使用了倍增的思想。每当超过vector的长度时,会申请双倍的空间。
vector的常用函数
| 常用函数 | 含义 |
|---|---|
| v.size() | 返回元素个数 |
| v.empty | 返回是否为空 |
| v.clear() | 清空 |
| v.front() | 返回第一个元素 |
| v.back() | 返回最后一个元素 |
| v.push_back() | 在最后插入一个数 |
| v.pop_back() | 删除最后一个数 |
| v.begin() | 返回第一个元素的迭代器 |
| v.end() | 返回尾后元素的迭代器 |
遍历vector的三种方式
1 | vector<int> a; |
vector支持比较运算
1 | vector<int> a(4, 3), b(3, 4); |
pair
pair
string
string
queue
queue
priority_queue
priority_queue
stack
deque
deque
set, map, multiset, multimap
详情
基于平衡二叉树(红黑树),动态维护有序序列
set, multiset
详情
set中不能有重复元素
multiset中可以有重复元素
| set/multiset支持函数 | 含义 |
|---|---|
| size() | 返回长度 |
| empty() | 返回是否为空 |
| clear() | 清空 |
| begin()/end() | 支持迭代器 |
| insert() | 插入一个数 |
| find() | 查找一个数,如果不存在返回end迭代器 |
| count() | 返回某一个数的个数 |
| erase() | 如果输入是一个数x,删除所有x 如果输入一个迭代器,删除这个迭代器 |
| lower_bound(x) upper_bound(x) | 返回大于等于x的最小的数的迭代器 返回大于x的最小的数的迭代器 |
set最核心的两个操作就是lower_bound()和upper_bound()
map, multimap
详情
| map/multimap支持函数 | 含义 |
|---|---|
| size() | 返回长度 |
| empty() | 返回是否为空 |
| clear() | 清空 |
| begin()/end() | 支持迭代器 |
| insert() | 输入的参数是一个pair |
| erase() | 输入的参数pair或迭代器 |
| find() | 查找一个数,如果不存在返回end迭代器 |
| lower_bound(x) upper_bound(x) | 返回大于等于x的最小的数的迭代器 返回大于x的最小的数的迭代器 |
| [ ] | 支持随机选取,这是map最核心的操作 |
可以像使用数组一样使用map
但要注意时间复杂度是o(logn)
1 | map<string, int> a; |
unordered_set, unordered_map, unordered_multiset, unordered_multimap
详情
操作和上面类似,一一对应
优点:增删改查的时间复杂度是o(1);
缺点:不支持lower_bound()/upper_bound(),也不支持迭代器++,—,和排序有关的操作都不支持
因为是unordered,无序的
bitset
bitset
常用库函数
bitset
常用库函数都在algorithm里
reverse
翻转数组或vector数组
reverse(首元素位置,尾元素的下一个位置)
1 | int a[] = {1, 2, 3, 4, 5}; |
unique
去重
返回去重之后的尾迭代器,即去重后尾元素的下一个位置
将其余元素放到最后
1 | int m = unique(a.begin(), a.end()) - a.begin();//求得数组中不同元素的数量 |
random_shuffle
把数组打乱
1 | random_shuffle(a.begin(), a.end()); |
sort
给数组排序
1 | sort(a.begin(), a.end());//默认从小到大排序 |
给结构体排序
1 | //法一:写cmp函数 |
lower_bound/upper_bound
1 | vector<int> a{1, 2, 3, 4, 5}; |
next_permutation
next_permutation(begin(), end());
将传入排列转换成字典序加一的下一个排列,如果排不了了, 返回false
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 adomais's blog!
评论





