文章目录
一、容器概览与核心特性
std::queue
是C++标准模板库(STL)提供的容器适配器,遵循先进先出(FIFO)原则。它基于底层容器(默认std::deque
)封装实现,为队列操作提供统一接口。
核心特性速览
特性 | 说明 |
---|---|
底层容器 | 默认deque,可指定list |
时间复杂度 | push/pop均为O(1) |
空间复杂度 | 与底层容器一致 |
迭代器支持 | ❌ 不支持遍历操作 |
头文件 | <queue> |
二、底层实现原理
1. 容器适配器设计
queue
通过组合现有容器实现功能,类声明原型:
template<
typename T,
typename Container = std::deque<T>
> class queue;
支持的可选底层容器需满足以下接口:
-
push_back()
-
pop_front()
-
front()
-
back()
-
empty()
-
size()
2. 默认容器对比
底层容器 | 优点 | 缺点 |
---|---|---|
deque | 高效头尾操作(默认最优解) | 内存非连续 |
list | 稳定删除性能 | 内存碎片化,缓存不友好 |
三、核心操作详解
1. 容器初始化
// 默认使用deque
queue<int> q1;
// 指定底层容器
queue<string, list<string>> q2;
// 通过已有容器初始化
deque<int> dq {
1,2,3};
queue<int> q3(dq); // 注意:复制容器内容
2. 元素操作接口
queue<string> msgQueue;
// 入队操作
msgQueue.push("msg1"); // 拷贝插入
msgQueue.emplace("msg2"); // 原地构造(C++11)
// 访问首尾元素
cout << "Front: " << msgQueue.front();
cout << "Back: " << msgQueue.back();
// 出队操作
msgQueue.pop(); // 返回void,需先获取front()
// 容量检查
if (!msgQueue.empty()) {
cout << "Queue size: " << msgQueue.size();
}
3. 自定义队列实现
template<typename T, typename Container = deque<T>>
class ThreadSafeQueue {
queue<T, Container> data;
mutex mtx;
condition_variable cv;
public:
void push(const T& val) {