C++中不同容器有不同的函数接口,这篇文章中汇总了不同容器的用法及接口
一句话总规则
看"容器是什么",就知道该用什么函数
- vector / deque →
push_back()/back() - stack / queue / priority_queue →
push()/top()(或front())
完整对照表(收藏级)
| 容器 | 加元素 | 看元素 | 弹出 |
|---|---|---|---|
vector |
push_back |
back |
pop_back |
string |
push_back |
back |
pop_back |
deque |
push_back / push_front |
back / front |
pop_back / pop_front |
stack |
push |
top |
pop |
queue |
push |
front |
pop |
priority_queue |
push |
top |
pop |
一、vector ------ 动态数组(刷题使用率 ⭐⭐⭐⭐⭐)
它是什么
- 连续内存的动态数组
- 下标访问:
O(1) - 末尾插入/删除:均摊
O(1)
主要接口
cpp
push_back()
pop_back()
back()
operator[]
size()
特点
- 存储是连续的(cache 友好)
- 支持随机访问
- 不能高效在中间/头部插入
什么时候用
- 存数组、结果集
- DP 数组
- 当栈用(最常见)
- 邻接表(
vector<vector<int>>)
📌 刷题里:90% 的时候首选 vector
二、string ------ 字符数组(本质是 vector)
它是什么
- 专门为字符串设计的动态数组
主要接口
cpp
push_back()
pop_back()
back()
substr()
size()
特点
- 和
vector<char>非常像 - 提供字符串相关的高级操作
什么时候用
- 字符串处理题(394、151、415 等)
- 拼接、截取字符串
三、deque ------ 双端队列(两头都快)
它是什么
- 双端队列
- 头尾插入/删除都是
O(1)
主要接口
cpp
push_back()
push_front()
pop_back()
pop_front()
front()
back()
特点
- 不要求连续内存
- 头尾操作都快
- 随机访问也支持(但略慢于 vector)
什么时候用
- 滑动窗口
- 单调队列
- 需要频繁操作队头 + 队尾
📌 刷题中:滑动窗口 ≈ deque
四、stack ------ 栈(LIFO)
它是什么
- 后进先出的数据结构
- 容器适配器(默认用
deque实现)
主要接口
cpp
push()
pop()
top()
特点
- 不支持遍历
- 不支持随机访问
- 只能操作"栈顶"
什么时候用
- 括号匹配
- 表达式求值
- DFS 模拟递归
📌 实战中:
很多人用 vector 当 stack(因为更灵活)
五、queue ------ 队列(FIFO)
它是什么
- 先进先出的数据结构
- 只能从一头进、一头出
主要接口
cpp
push()
pop()
front()
特点
- 不支持随机访问
- 不支持遍历
什么时候用
- BFS
- 层序遍历
- 任务调度
📌 BFS = queue(几乎固定搭配)
六、priority_queue ------ 优先队列(堆)
它是什么
- 基于 堆(heap) 的容器
- 默认是 大根堆
主要接口
cpp
push()
pop()
top()
特点
top()永远是"最重要"的元素- 插入/删除:
O(log n) - 不支持遍历(逻辑上)
什么时候用
- Top K 问题
- 最值维护
- Dijkstra
- 贪心算法
📌 TopK ≈ priority_queue(小根堆)
七、这些容器的"抽象层次差异"(非常重要)
顺序容器(你决定位置)
vectorstringdeque
👉 你知道元素放哪
抽象数据结构(结构决定位置)
stackqueuepriority_queue
👉 你不能决定放哪,只能服从规则
八、刷题选容器的"快速判断表"
| 需求 | 容器 |
|---|---|
| 随机访问 | vector |
| 末尾进出 | vector |
| 头尾进出 | deque |
| 后进先出 | stack / vector |
| 先进先出 | queue |
| 最大 / 最小优先 | priority_queue |
| Top K | priority_queue |
| BFS | queue |
| DFS(手写) | stack / vector |
vector是基础
deque管两头
stack是后进先出
queue是先进先出
priority_queue负责"谁最重要先出来"