文章目录
C++的标准模板库(Standard Template Library, 简称STL)是一个容器和算法的类库,比较常用的容器有stack、queue、priorty_queue、set、vector、pair、string等,比较常用的算法有sort、max、min、abs、swap、reverse等
所有容器都支持的方法
方法 | 描述 | 示例 | 时间复杂度 |
---|---|---|---|
size | 返回容器中的元素数目 | s.size() | O(1) |
empty | 判断容器是否为空,容器空时,返回true | s.empty() | O(1) |
栈(stack)
包含在stack头文件中
特点:只能在栈顶放入元素,在栈顶删除元素,后进先出
方法 | 描述 | 示例 | 时间复杂度 |
---|---|---|---|
push | 入栈(栈顶) | s.push(x) | O(1) |
pop | 出栈(栈顶) | s.pop() | O(1) |
top | 返回栈顶元素 | s.top() | O(1) |
循环队列(queue)
包含在queue头文件中
特点:只能从队头删除元素,从队尾放入元素,先进先出
方法 | 描述 | 示例 | 时间复杂度 |
---|---|---|---|
push | 入队(队尾) | que.push(x) | O(1) |
pop | 出队(队头) | que.pop() | O(1) |
front | 返回队头元素 | que.front() | O(1) |
back | 返回队尾元素 | que.back() | O(1) |
优先队列(priority_queue)
包含在queue头文件中
priority_queue可以理解为一个大根二叉堆,堆顶元素为最大值
声明一个从大到小取出数值的优先队列
priority_queue<int> que; // 大根堆
声明一个从小到大取出数值的优先队列
priority_queue<int, vector<int>, greater<int> > que; // 小根堆
方法 | 描述 | 示例 | 时间复杂度 |
---|---|---|---|
push | 把元素x插入堆 | que.push(x) | O(logn) |
pop | 删除堆顶元素 | que.pop() | O(logn) |
top | 返回堆顶元素 | que.top() | O(1) |
有序集合(set)
包含在set头文件中
set由红黑树实现,set中的元素不能重复,有自动去重的功能
方法 | 描述 | 示例 | 时间复杂度 |
---|---|---|---|
clear | 清空 | s.clear() | O(n) |
insert | 插入元素x | s.insert(x) | O(logn) |
find | 返回等于x的元素的迭代器。若不存在等于x的元素,则返回s.end() | s.find(x) | O(logn) |
erase | 删除迭代器it指向的元素 | s.erase(it) | O(logn) |
erase | 删除等于x的元素 | s.erase(x) | O(logn) |
count | 返回集合中等于x的元素个数 | s.count(x) | O(logn) |
向量(vector)
包含在vector头文件中
vector是一个动态数组,可以像数组一样用下标访问元素
方法 | 描述 | 示例 | 时间复杂度 |
---|---|---|---|
clear | 清空 | v.clear() | O(n) |
push_back | 把元素x放入vector尾部 | v.push_back(x) | O(1) |
pop_back | 删除vector尾部的最后一个元素 | v.pop_back | O(1) |
初始化方式:
1)默认初始化:
vector<int> vec;
2)拷贝
vector<int> vec2(vec);
3)包含初始值
vector<int> vec = {
1, 2, 3};
参考:https://blog.csdn.net/veghlreywg/article/details/80400382
排序:
用sort进行排序(可以写cmp函数或者重载<)
字典(map)
包含在map头文件中
map是一个关联容器,提供一对一的键值对(key-value)映射
方法 | 描述 | 示例 |
---|