一、C++ 队列(queue)的核心性质
队列是 C++ STL 中的容器适配器(不是原生容器),它封装了底层容器(默认是
deque),并提供符合'先进先出(FIFO, First In First Out)'规则的操作接口。核心性质如下:
- 底层实现:
queue本身不存储数据,而是依赖其他容器作为'底层存储',属于适配器模式。默认底层容器是std::deque(双端队列),也可以手动指定为std::list(只要满足back()、front()、push_back()、pop_front()、empty()、size()接口的容器都可以)。选择deque作为默认的原因:兼顾了数组的随机访问优势和链表的高效插入 / 删除优势,且避免了vector扩容时的内存拷贝开销。 - 访问 / 操作规则(核心):
- 访问限制:只能访问队首(第一个入队的元素)和队尾(最后一个入队的元素),不支持随机访问(比如通过下标
q[0]访问),也没有迭代器(无法用for循环遍历)。 - 操作限制:只能在队尾插入元素,只能在队首删除元素,完全符合'排队'的逻辑。
- 访问限制:只能访问队首(第一个入队的元素)和队尾(最后一个入队的元素),不支持随机访问(比如通过下标
- 其他特性:不支持排序、反转等操作(因为 FIFO 规则不允许);线程不安全(多线程操作需手动加锁)。
二、queue 的常用接口(附代码示例)
包含头文件:#include <queue>。
std::queue的核心设计目标是严格遵循先进先出(FIFO) 规则,它的接口是为这个规则量身定制的:允许的操作:队尾插入(push/emplace)、队首删除(pop);禁止的操作:删除队尾、删除中间元素、随机删除 —— 这些操作会破坏 FIFO 的核心逻辑,因此标准库刻意隐藏了这些接口。
1. 构造函数
| 构造方式 | 说明 |
|---|---|
queue<T> q; | 默认构造,底层为deque<T>,空队列 |
queue<T, Container> q; | 指定底层容器(如list<T>) |
queue<T> q2(q1); | 拷贝构造,复制 q1 的所有元素到 q2 |
2. 元素访问(仅 2 个接口)
| 接口 | 说明 | 注意事项 |
|---|---|---|
q.front() | 返回队首元素的引用(可修改) | 队列空时调用会导致未定义行为 |
q.back() | 返回队尾元素的引用(可修改) |


