一、什么是队列

队列是一种先进先出(FIFO, First In First Out)的线性数据结构。

  • 就像我们排队买奶茶:
    • 先来的人先买到(先出)
    • 后来的人排在队尾(后入)

队列的两个核心操作:

操作说明
push(x)从队尾加入元素
pop()从队头移除元素

注意:不能随机访问中间元素,也不能从队尾删除或队头插入!

二、C++ STL 中的 queue

在 C++ 中,queue 是一个容器适配器,它默认基于 deque(双端队列)实现,也可以指定其他底层容器(如 list)。

需要引用头文件·

#include <queue>

声明方式

std::queue<int> q;          // 默认使用 deque
std::queue<int, std::list<int>> q2; // 使用 list 作为底层容器

一般就使用queue<int> q就可以了

三、常用成员函数与示例

函数作用时间复杂度
push(x)入队(队尾添加)O(1)
pop()出队(队头删除)O(1)
front()获取队头元素O(1)
back()获取队尾元素O(1)
empty()判断是否为空O(1)
size()返回元素个数O(1)

代码样例如下:

#include <iostream>
#include <queue>
using namespace std;

int main() {
    queue<int> q;

    // 入队
    q.push(10);
    q.push(20);
    q.push(30);

    cout << "队头: " << q.front() << endl; // 输出: 10
    cout << "队尾: " << q.back() << endl;  // 输出: 30
    cout << "大小: " << q.size() << endl;  // 输出: 3

    // 出队
    while (!q.empty()) {
        cout << q.front() << " ";
        q.pop();
    }
    // 输出: 10 20 30

    return 0;
}

 六、注意事项 & 常见误区

误区正确做法
试图用 q[0] 访问元素只能用 front() 和 back()
忘记判空就调用 front() 或 pop()先 if (!q.empty())
想遍历队列queue 不支持迭代器!如需遍历,考虑用 deque 或转存到 vector
混淆 queue 和 priority_queuepriority_queue 是堆,默认大顶堆,不是 FIFO!

以上就是关于队列queue的一些基本使用,接下来会更新关于queue的一些题目

更多推荐