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


相关推荐
无风听海几秒前
深入讲解 C# 中 string 如何支持 CultureInfo
开发语言·c#
yaoxin5211232 分钟前
291. Java Stream API - 从正则表达式创建 Stream
java·开发语言
BHXDML6 分钟前
Java 设计模式详解
java·开发语言·设计模式
CCPC不拿奖不改名10 分钟前
数据处理与分析:pandas基础+面试习题
开发语言·数据结构·python·面试·职场和发展·pandas
余瑜鱼鱼鱼13 分钟前
Java数据结构:从入门到精通(十三)
java·开发语言
wzfj1234514 分钟前
FreeRTOS xTaskCreateStatic 详解
开发语言·c#
运维行者_22 分钟前
远程办公场景 NFA:从网络嗅探与局域网流量监控软件排查团队网络卡顿问题
运维·服务器·开发语言·网络·自动化·php
txinyu的博客25 分钟前
C++ 智能指针 (shared_ptr/weak_ptr) 全解析
开发语言·c++
没有bug.的程序员29 分钟前
Java内存模型(JMM)深度解析:从 volatile 到 happens-before 的底层机制
java·开发语言·并发编程·volatile·内存模型·jmm·happens-before
小徐不徐说29 分钟前
避坑指南:Qt 中 Lambda 表达式崩溃原因与高效使用实践
数据库·c++·qt·面试