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
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 adomais's blog!
评论






