← 目录 / 第十一章 · STL 标准模板库 / 11.6 queue

11.6 queue 队列

先进先出(FIFO)的容器适配器——就像排队买东西,先来的人先被服务,只能从队尾进、从队首出。

本页目录

queue(队列)是一种先进先出(FIFO,First In First Out)的数据结构,就像排队买东西——先来的人先被服务。它和 stack 一样是容器适配器,底层默认用 deque 实现。使用前需引入 <queue> 头文件。

queue:从队尾进,从队首出
1
2
3
4
⬅ front() / pop() 队首出 push() 队尾进 ➡
⚠️
stack 一样:queue 没有迭代器,不能遍历。要访问元素只能通过 front() 取队首,然后 pop() 弹出。
11.6.1 定义与初始化
C++ · queue 的定义方式
1#include <iostream>
2#include <queue> // 必须包含这个头文件
3using namespace std;
4
5int main()
6{
7 queue<int> q1; // 空队列
8 queue<int> q2(q1); // 拷贝另一个队列
9 return 0;
10}
11.6.2 常用操作
C++ · push / front / back / pop
1queue<int> q;
2q.push(1); // 入队:[1]
3q.push(2); // 入队:[1, 2]
4q.push(3); // 入队:[1, 2, 3]
5
6cout << q.front() << endl; // 输出:1——队首元素
7cout << q.back() << endl; // 输出:3——队尾元素
8
9q.pop(); // 队首出队:[2, 3]
10
11cout << q.size() << endl; // 输出:2
12cout << q.empty() << endl; // 输出:0(false)
13
14// 逐个出队
15while (!q.empty())
16{
17 cout << q.front() << " "; // 输出:2 3
18 q.pop();
19}
💡
front() vs back():queuestack 多了一个 back(),因为队列两端都有意义——front() 看即将出队的元素,back() 看刚刚入队的元素。但和 stack 一样,pop() 仍然不返回值,要拿值得先用 front()
11.6.3 完整使用示例
C++ · queue 综合示例
1#include <iostream>
2#include <queue>
3using namespace std;
4
5int main()
6{
7 queue<int> q;
8
9 // 模拟排队:依次入队
10 q.push(1);
11 q.push(2);
12 q.push(3);
13
14 cout << "队首: " << q.front() << endl; // 输出:1
15 cout << "队尾: " << q.back() << endl; // 输出:3
16
17 // 依次出队(先进先出)
18 cout << "依次出队: ";
19 while (!q.empty())
20 {
21 cout << q.front() << " "; // 输出:1 2 3
22 q.pop();
23 }
24 cout << endl;
25
26 return 0;
27}
📋 queue 常用操作速查表

把本节出现过的方法按用途归类汇总,写代码时可以直接当参考卡用。

方法分类作用
q.push(x)修改从队尾插入元素
q.pop()修改从队首删除元素,不返回值
q.front()访问读取队首元素(即将出队)
q.back()访问读取队尾元素(刚刚入队)
q.size() / q.empty()容量元素个数 / 判断是否为空
q1.swap(q2)修改交换两个队列的全部内容
🎯
什么时候用 queue?BFS(广度优先搜索)几乎离不开它——每次从队首取出当前节点,把它的邻居依次压入队尾。模拟排队、任务调度等"先来先服务"的场景也是 queue 的典型用法。