C++中不同容器的用法及接口(vector / deque / stack / queue / priority_queue)

C++中不同容器有不同的函数接口,这篇文章中汇总了不同容器的用法及接口

一句话总规则

看"容器是什么",就知道该用什么函数

  • vector / dequepush_back() / back()
  • stack / queue / priority_queuepush() / 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(小根堆)


七、这些容器的"抽象层次差异"(非常重要)

顺序容器(你决定位置)

  • vector
  • string
  • deque

👉 你知道元素放哪


抽象数据结构(结构决定位置)

  • stack
  • queue
  • priority_queue

👉 你不能决定放哪,只能服从规则


八、刷题选容器的"快速判断表"

需求 容器
随机访问 vector
末尾进出 vector
头尾进出 deque
后进先出 stack / vector
先进先出 queue
最大 / 最小优先 priority_queue
Top K priority_queue
BFS queue
DFS(手写) stack / vector

vector 是基础
deque 管两头
stack 是后进先出
queue 是先进先出
priority_queue 负责"谁最重要先出来"


相关推荐
肆忆_5 小时前
# 用 5 个问题学懂 C++ 虚函数(入门级)
c++
不想写代码的星星8 小时前
虚函数表:C++ 多态背后的那个男人
c++
端平入洛2 天前
delete又未完全delete
c++
端平入洛3 天前
auto有时不auto
c++
郑州光合科技余经理4 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1234 天前
matlab画图工具
开发语言·matlab
dustcell.4 天前
haproxy七层代理
java·开发语言·前端
norlan_jame4 天前
C-PHY与D-PHY差异
c语言·开发语言
哇哈哈20214 天前
信号量和信号
linux·c++
多恩Stone4 天前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc