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 负责"谁最重要先出来"


相关推荐
大飞记Python13 分钟前
【2026更新】Python基础学习指南(AI版)——04数据类型
开发语言·人工智能·python
Alice-YUE1 小时前
【js高频八股】防抖与节流
开发语言·前端·javascript·笔记·学习·ecmascript
云泽8081 小时前
C++11 核心特性全解:列表初始化、右值引用与移动语义实战
开发语言·c++
froginwe111 小时前
DOM 加载函数
开发语言
Hello eveybody2 小时前
介绍一下背包DP(Python)
开发语言·python·动态规划·dp·背包dp
AI进化营-智能译站2 小时前
ROS2 C++开发系列12-用多态与虚函数构建可扩展的ROS2机器人行为模块
开发语言·c++·ai·机器人
iCxhust2 小时前
微机原理实践教程(C语言篇)---A002流水灯
c语言·开发语言·单片机·嵌入式硬件·51单片机·课程设计·微机原理
Morwit2 小时前
QML组件之间的通信方案(暴露子组件)
c++·qt·职场和发展
qeen872 小时前
【数据结构】建堆的时间复杂度讨论与TOP-K问题
c语言·数据结构·c++·学习·
莎士比亚的文学花园2 小时前
Linux驱动开发(3)——设备树
开发语言·javascript·ecmascript