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

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(小根堆)


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

顺序容器(你决定位置)

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


相关推荐
倒头就睡的小比特3 天前
算法竞赛C++常用的STL
c++·算法
weilx12343 天前
C++笔记-文件IO-<fcntl.h>
c++
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
伞伞悦读3 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
Smileyqp沛沛3 天前
前端?C++ ?较大差异基础罗列
c++·基础·前端转c++
C语言小火车3 天前
C/C++ 为什么需要编译器?
开发语言·c++
旖旎夜光3 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
吞下星星的少年·-·3 天前
C++ 萌新语法入门篇
c++·算法比赛
霍霍的袁3 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
another heaven3 天前
【算法/C++ MD5算法能否逆解码?原理、C++实现与同类哈希算法对比】
c++·算法·哈希算法