C++如何使用队列(queue)?(STL容器教程)

std::queue是STL容器适配器,默认基于deque实现,支持FIFO操作;仅允许队尾入队、队首出队,不支持随机访问,使用前需#include ,常用函数包括push、pop、front、back、empty和size。

在C++中,std::queue 是 STL 提供的一个容器适配器,底层默认基于 deque 实现,支持先进先出(FIFO)操作。它不提供随机访问,只允许在队尾入队、队首出队。

基本用法与头文件

使用前需包含头文件:

#include

定义方式为:std::queue q;,其中 T 是元素类型,例如 intstring 或自定义类(需满足可拷贝/可移动)。

常用操作与成员函数

std::queue 接口简洁,核心操作只有几个:

  • push(x):将元素 x 插入队尾
  • pop():移除队首元素(不返回值)
  • front():访问队首元素(返回引用,不可修改时用 const 版本)
  • back():访问队尾元素(同样返回引用)
  • empty():判断队列是否为空,返回 bool
  • size():返回当前元素个数

注意:front()back() 在空队列上调用是未定义行为,务必先用 empty() 检查。

底层容器可替换(进阶)

std::queue 是适配器,允许指定底层容器,例如改用 vectorlist

std::queue> q1; // 基于 list
std::queue> q2; // 非法!vector 不支持 pop_front()

但注意:底层容器必须支持 front()back()push_back()pop_front() —— 所以 vector 不可用(缺 pop_front),而 deque(默认)和 list 是安全的。

简单示例:模拟排队入场

std::queue<:string> line;
line.push("Alice");
line.push("Bob");
line.push("Charlie");

while (!line.empty()) {
  std::cout   line.pop();
}

输出为:Next: AliceNext: BobNext: Charlie,体现 FIFO 特性。

基本上就这些。它不复杂但容易忽略边界检查,用对场景(比如 BFS、任务调度、缓冲处理)很顺手。