下面是一份 C++ STL 常用容器的速查表,覆盖刷题中最常用的操作:
vector(动态数组)
cpp
#include <vector>
vector<int> v;
| 操作 | 代码 | 说明 |
|---|---|---|
| 尾部插入 | v.push_back(x) |
O(1) 均摊 |
| 尾部删除 | v.pop_back() |
O(1) |
| 获取长度 | v.size() |
O(1) |
| 判空 | v.empty() |
返回 bool |
| 下标访问 | v[i] |
O(1) |
| 访问首/尾 | v.front() / v.back() |
|
| 清空 | v.clear() |
|
| 排序 | sort(v.begin(), v.end()) |
升序 |
| 降序排序 | sort(v.begin(), v.end(), greater<int>()) |
|
| 遍历 | for (int x : v) |
set(集合,自动去重+升序)
cpp
#include <set>
set<int> s;
| 操作 | 代码 | 说明 |
|---|---|---|
| 插入 | s.insert(x) |
O(log n) |
| 删除 | s.erase(x) |
按值删除 |
| 查找 | s.count(x) |
返回 0 或 1 |
| 查找 | s.find(x) |
返回迭代器,找不到返回 s.end() |
| 获取长度 | s.size() |
|
| 判空 | s.empty() |
|
| 最小元素 | *s.begin() |
|
| 最大元素 | *s.rbegin() |
|
| 遍历 | for (int x : s) |
自动升序 |
| 降序定义 | set<int, greater<int>> s; |
插入后自动降序 |
map(键值对,按键升序)
cpp
#include <map>
map<string, int> m;
| 操作 | 代码 | 说明 |
|---|---|---|
| 插入/修改 | m["key"] = 1 |
键不存在会自动创建 |
| 查找 | m.count("key") |
返回 0 或 1 |
| 查找 | m.find("key") |
返回迭代器 |
| 删除 | m.erase("key") |
|
| 获取长度 | m.size() |
|
| 遍历 | for (auto p : m) |
p.first 是键,p.second 是值 |
queue(队列,先进先出)
cpp
#include <queue>
queue<int> q;
| 操作 | 代码 | 说明 |
|---|---|---|
| 入队 | q.push(x) |
从队尾加入 |
| 出队 | q.pop() |
从队头弹出 |
| 队头元素 | q.front() |
|
| 获取长度 | q.size() |
|
| 判空 | q.empty() |
stack(栈,后进先出)
cpp
#include <stack>
stack<int> st;
| 操作 | 代码 | 说明 |
|---|---|---|
| 入栈 | st.push(x) |
从栈顶压入 |
| 出栈 | st.pop() |
弹出栈顶 |
| 栈顶元素 | st.top() |
|
| 获取长度 | st.size() |
|
| 判空 | st.empty() |
priority_queue(优先队列/堆)
cpp
#include <queue>
priority_queue<int> pq; // 默认大顶堆
| 操作 | 代码 | 说明 |
|---|---|---|
| 入堆 | pq.push(x) |
O(log n) |
| 出堆 | pq.pop() |
弹出堆顶 |
| 堆顶元素 | pq.top() |
最大值(大顶堆) |
| 判空 | pq.empty() |
|
| 小顶堆定义 | priority_queue<int, vector<int>, greater<int>> pq; |
堆顶为最小值 |
常用算法函数
cpp
#include <algorithm>
| 功能 | 代码 |
|---|---|
| 排序 | sort(v.begin(), v.end()) |
| 反转 | reverse(v.begin(), v.end()) |
| 查找最小值 | *min_element(v.begin(), v.end()) |
| 查找最大值 | *max_element(v.begin(), v.end()) |
| 二分查找 | binary_search(v.begin(), v.end(), x) |
| 去重(需先排序) | v.erase(unique(v.begin(), v.end()), v.end()) |
| 交换 | swap(a, b) |
| 填充 | fill(v.begin(), v.end(), 0) |
刷题选择指南
| 需求 | 选哪个 |
|---|---|
| 需要按下标随机访问 | vector |
| 需要自动去重+排序 | set |
| 需要键值对映射 | map |
| 先进先出(BFS) | queue |
| 后进先出(DFS/括号匹配) | stack |
| 每次取最大/最小值 | priority_queue |