queue
std::queue 是 C++ 标准库中的容器适配器,遵循先进先出(FIFO, First In First Out)规则。
需要注意:queue 不是完整容器,它是对底层容器(默认 deque)的封装,只暴露队列语义相关接口。
头文件与基本特征
使用 queue 时,需要包含头文件:
#include <queue>
queue 的常见特征如下:
| 特征 | 说明 |
|---|---|
| 类型 | 容器适配器 |
| 访问方式 | 仅队头和队尾 |
| 入队 | push()(尾部) |
| 出队 | pop()(头部) |
| 顺序规则 | 先进先出(FIFO) |
| 默认底层容器 | std::deque |
基本用法
#include <queue>
int main() {
std::queue<int> q;
q.push(10);
q.push(20);
q.push(30);
q.pop(); // 弹出 10
return 0;
}
常用成员函数
| 函数 | 作用 |
|---|---|
push(x) | 元素入队(队尾) |
pop() | 队头元素出队 |
front() | 访问队头元素 |
back() | 访问队尾元素 |
size() | 当前元素个数 |
empty() | 判断是否为空 |
遍历说明
queue 不提供迭代器,因此不能像 vector、list 那样直接 for 遍历。
若要查看所有元素,通常复制一份队列后边弹边看:
#include <iostream>
#include <queue>
int main() {
std::queue<int> q;
q.push(1);
q.push(2);
q.push(3);
std::queue<int> tmp = q;
while (!tmp.empty()) {
std::cout << tmp.front() << ' ';
tmp.pop();
}
std::cout << '\n';
return 0;
}
典型场景
queue 常用于:
- 图的广度优先搜索(BFS)。
- 消息排队、任务队列、流水线处理。
- 需要严格按到达顺序处理的数据流。
使用注意
pop()不返回被弹出的值,需要先front()再pop()。- 访问
front()/back()前应确认队列非空。 - 如果需要“优先级出队”,应使用
priority_queue,而不是queue。