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


相关推荐
2601_962071572 小时前
【Java报错已解决】org.springframework.beans.factory.BeanCreationException
java·开发语言
淡海水3 小时前
07-04-并发-ConcurrentBag-T-工作窃取WorkStealing算法
开发语言·算法·c#·bag·concurrent·workstealing
CS_Zero4 小时前
C语言sizeof是函数吗?
c语言·开发语言
-今昭-5 小时前
《V2V 迁移实战:将 VMware 虚拟机转为 OpenStack 可用 Glance qcow2 镜像》
开发语言·python
黑马程序员毕设6 小时前
基于Java的医院药品管理系统的优化设计与实现
java·开发语言·spring boot·小程序·架构·课程设计·毕设
_Twink1e7 小时前
openJiuwen 实训营 Day 1 · WorkSwarm 入门教程
开发语言·c++·openjiuwen
问天_观心7 小时前
大模型微调学习(一)
开发语言·人工智能·学习·语言模型·github
阿里嘎多学长7 小时前
2026-09-03 GitHub 热点项目精选
开发语言·程序员·github·代码托管
dong_junshuai8 小时前
每天一个开源项目#87 fmt:24.5K Stars 的 C++ 格式化核心
c++·开源·github
源代码•宸8 小时前
前置准备:定时微服务背景和现状
开发语言·经验分享·后端·微服务·云原生·架构·golang