Appearance
queue 容器详解
queue(队列)是 STL 中经典的容器适配器,遵循先进先出(FIFO)原则,只能在队尾插入元素、队头删除元素,不支持随机访问、中间插入 / 删除,是算法与工程中常用的线性容器。
一、queue 核心特性
- 先进先出(FIFO):最早进入队列的元素最先取出
- 容器适配器:底层默认依赖
deque实现,也可使用list - 限制访问:只能访问队头(front)和队尾(back),不能遍历 / 访问中间元素
- 高效操作:插入、删除、访问头尾均为 O(1) 常数时间复杂度
- 无迭代器:不支持迭代器,无法范围遍历
二、queue 与其他容器核心区别
- vector:支持随机访问,可任意位置操作
- list:双链表,任意位置插入删除高效
- queue:仅头尾操作,严格先进先出,无中间操作
- stack:仅栈顶操作,先进后出
三、基础用法
cpp
#include <iostream>
#include <queue> // queue 必须包含的头文件
using namespace std;
int main() {
// 1. 定义一个存储 int 类型的队列
queue<int> q;
// 2. 队尾插入元素
q.push(10);
q.push(20);
q.push(30);
// 3. 访问队头、队尾
cout << "队头元素:" << q.front() << endl; // 10
cout << "队尾元素:" << q.back() << endl; // 30
// 4. 删除队头元素(无返回值)
q.pop();
cout << "pop 后新队头:" << q.front() << endl; // 20
// 5. 获取大小 + 判空
cout << "队列大小:" << q.size() << endl; // 2
cout << "是否为空:" << (q.empty() ? "是" : "否") << endl;
// 6. 清空队列(queue 无 clear(),需手动清空)
while (!q.empty()) {
q.pop();
}
return 0;
}四、queue 常用操作汇总
| 操作 | 语法 | 说明 |
|---|---|---|
| 插入(队尾) | push(元素) | 在队列尾部插入一个元素,效率 O(1) |
| 删除(队头) | pop() | 删除队列头部的元素,无返回值,效率 O(1) |
| 访问队头 | front() | 返回队列头部的元素(不删除),需确保队列非空 |
| 访问队尾 | back() | 返回队列尾部的元素(不删除),需确保队列非空 |
| 判空 | empty() | 队列为空返回 true,否则返回 false |
| 获取大小 | size() | 返回队列中元素的个数 |
五、适用场景总结(一句话选型)
- 需要严格先进先出的顺序 → 使用 queue
- 广度优先搜索(BFS)→ 标准使用 queue
- 任务排队、消息队列、缓冲处理 → 最适合 queue
- 需要随机访问 / 中间操作 → 不要用 queue
六、注意事项
- 不能遍历:queue 不提供迭代器,无法用 for/while 遍历全部元素
- 访问前必须判空:调用 front () /back () /pop () 前必须确保队列非空,否则程序崩溃
- 无 clear ():如需清空,必须循环 pop ()
- 底层容器:默认 deque,可手动指定
queue<int, list<int>> - 不可修改:只能在头尾操作,不能修改中间元素
