Skip to content

queue 容器详解

queue(队列)是 STL 中经典的容器适配器,遵循先进先出(FIFO)原则,只能在队尾插入元素、队头删除元素,不支持随机访问、中间插入 / 删除,是算法与工程中常用的线性容器。

一、queue 核心特性

  1. 先进先出(FIFO):最早进入队列的元素最先取出
  2. 容器适配器:底层默认依赖 deque 实现,也可使用 list
  3. 限制访问:只能访问队头(front)和队尾(back),不能遍历 / 访问中间元素
  4. 高效操作:插入、删除、访问头尾均为 O(1) 常数时间复杂度
  5. 无迭代器:不支持迭代器,无法范围遍历

二、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()返回队列中元素的个数

五、适用场景总结(一句话选型)

  1. 需要严格先进先出的顺序 → 使用 queue
  2. 广度优先搜索(BFS)→ 标准使用 queue
  3. 任务排队、消息队列、缓冲处理 → 最适合 queue
  4. 需要随机访问 / 中间操作 → 不要用 queue

六、注意事项

  1. 不能遍历:queue 不提供迭代器,无法用 for/while 遍历全部元素
  2. 访问前必须判空:调用 front () /back () /pop () 前必须确保队列非空,否则程序崩溃
  3. 无 clear ():如需清空,必须循环 pop ()
  4. 底层容器:默认 deque,可手动指定 queue<int, list<int>>
  5. 不可修改:只能在头尾操作,不能修改中间元素

百炼成钢,融会贯通