C++的queue是标准库中的容器适配器,底层默认基于deque实现,核心特性是先进先出,即先进入队列的元素会先被取出。它不支持随机访问,只能从队尾添加元素,从队头取出元素,适合处理需要按顺序流转的任务场景。

queue的初始化
使用queue前需要包含<queue>头文件,初始化时可以指定底层容器,默认使用deque,也可以指定为list,但不能用vector因为vector不支持pop_front操作。
#include <queue>
#include <deque>
#include <list>
#include <iostream>
int main() {
// 默认底层用deque初始化队列
std::queue<int> q1;
// 指定底层用list初始化队列
std::queue<int, std::list<int>> q2;
return 0;
}
入队操作
入队操作使用push方法,将元素添加到队列的尾部,时间复杂度为O(1)。
#include <queue>
#include <iostream>
int main() {
std::queue<int> q;
// 入队三个元素
q.push(10);
q.push(20);
q.push(30);
return 0;
}
出队操作
出队操作使用pop方法,将队列头部的元素移除,注意pop方法不会返回被移除的元素,只是执行删除操作,时间复杂度为O(1)。
#include <queue>
#include <iostream>
int main() {
std::queue<int> q;
q.push(10);
q.push(20);
// 移除队头元素10
q.pop();
return 0;
}
常用API总结
除了入队出队,queue还有多个常用的辅助API,具体作用如下:
| API名称 | 作用说明 | 返回值类型 |
|---|---|---|
| size() | 返回队列中当前元素的个数 | size_t |
| empty() | 判断队列是否为空,为空返回true,否则返回false | bool |
| front() | 返回队列头部元素的引用,不会移除元素 | 队列元素类型的引用 |
| back() | 返回队列尾部元素的引用,不会移除元素 | 队列元素类型的引用 |
API使用示例
#include <queue>
#include <iostream>
int main() {
std::queue<int> q;
// 判断队列是否为空
std::cout << "队列是否为空: " << (q.empty() ? "是" : "否") << std::endl;
// 入队元素
q.push(100);
q.push(200);
q.push(300);
// 获取队列大小
std::cout << "队列元素个数: " << q.size() << std::endl;
// 获取队头元素
std::cout << "队头元素: " << q.front() << std::endl;
// 获取队尾元素
std::cout << "队尾元素: " << q.back() << std::endl;
// 出队一个元素后再查看队头
q.pop();
std::cout << "出队后队头元素: " << q.front() << std::endl;
return 0;
}
注意事项
- 调用
front和back方法前需要先确保队列不为空,否则会导致未定义行为 pop方法只负责移除元素,不返回元素值,如果需要获取队头元素再移除,需要先调用front获取,再调用pop删除- queue不支持迭代器,不能遍历队列中的所有元素,只能依次出队访问
queue是C++标准库中非常实用的容器适配器,掌握它的基本操作和常用API,能够帮助开发者在处理顺序任务、广度优先搜索等场景中更高效地实现逻辑。