C++ STL queue 简介
queue 是 C++ 标准模板库(STL)中的容器适配器,严格遵循先进先出(FIFO)原则。它并非直接存储数据,而是基于其他容器(如 deque 或 list)进行封装,仅暴露队尾插入和队头删除的接口。
选择 deque 作为默认底层容器,是因为它在支持高效'队尾插入'(push_back)和'队头删除'(pop_front)操作的同时,避免了 vector 在头部删除时移动大量元素的开销,也无需像 list 那样维护额外的指针节点,综合性能更为均衡。
核心接口一览
| 函数名 | 作用说明 |
|---|---|
| void push(const T& x) | 在队尾插入元素 |
| void pop() | 移除队头元素 |
| T& front() | 获取队头引用 |
| T& back() | 获取队尾引用 |
| size_t size() | 返回当前元素数量 |
| bool empty() | 判断队列是否为空 |
模板设计与底层实现
为了兼顾灵活性与易用性,queue 采用了双重模板参数设计:
template<class T, class Container = deque<T>>
其中 T 定义了队列内部存储的数据类型,这是对外提供的'数据类型契约',确保队列内只存特定类型的对象。而 Container 则允许用户指定底层存储容器,默认值为 deque<T>。这种设计既隐藏了底层实现的复杂性,又保留了扩展性——如果用户想改用 list,只需显式指定第二个模板参数即可。若只保留 T 而省略 Container,虽然语法上可行,但会强制用户必须手动指定底层容器,增加了接口使用的门槛,违背了容器适配器'屏蔽底层细节'的设计初衷。
私有成员 _con 负责实际的数据存储:
private: Container _con;
关键方法逻辑解析
入队与出队
push 操作委托给底层容器的尾部插入,pop 则调用底层容器的头部删除。由于 queue 本身不管理内存分配,这些操作的性能完全取决于底层容器的效率。
void push(const T& x) { _con.push_back(x); }
void pop() { _con.(); }


