deque 是 c++ STL 中支持两端高效操作的序列容器,1. 可通过 push_front/push_back 在首尾插入元素,emplace 系列方法实现原地构造;2. pop_front/pop_back 删除首尾元素(不返回值);3. 支持 front/back 访问及下标随机访问(at 可越界检查);4. 提供 empty、size、clear 等容量操作;5. 拥有完整迭代器 接口,可正向或反向遍历;相比 vector,deque 在头部插入删除为 O(1),无需连续内存,适合双端队列、滑动窗口等场景,但缓存友好性与迭代器稳定性较弱。

在 C ++ 中,deque(双端队列)是标准模板库(STL)中的一个序列容器,支持在两端高效地插入和删除元素。它结合了 vector 的随机访问能力和 queue 的双端操作特性,是实现 栈、队列或需要频繁在首尾操作 数据结构 的理想选择。
包含头文件与基本定义
使用 deque 前需要包含对应的头文件:
#include <deque>
定义方式如下:
常用操作方法
-
dq.push_front(x):在头部插入元素 x -
dq.push_back(x):在尾部插入元素 x -
dq.emplace_front(args……):原地构造,比 push 更高效 -
dq.emplace_back(args……):同上,在尾部构造
2. 元素删除
从两端移除元素:
-
dq.pop_front():删除第一个元素 -
dq.pop_back():删除最后一个元素
注意:pop 操作不返回值,获取值需先用 front()/back()再调用 pop。
立即学习“C++ 免费学习笔记(深入)”;
3. 访问元素
支持随机访问和首尾访问:
-
dq.front():返回第一个元素的引用 -
dq.back():返回最后一个元素的引用 -
dq[i]或dq.at(i):访问索引 i 处的元素(at 会做越界检查)
4. 容量相关操作
5. 迭代器支持
deque 提供完整的迭代器接口:
-
dq.begin():指向首元素的迭代器 -
dq.end():指向末尾之后位置的迭代器 -
dq.rbegin()和dq.rend():反向迭代器
可用于范围遍历:
for (auto it = dq.begin(); it != dq.end(); ++it) {std::cout << *it << " ";}
deque 的特性与适用场景
与 vector 相比,deque 的主要优势在于:
- 在头部插入 / 删除效率高(O(1)),而 vector 在头部操作是 O(n)
- 支持双向扩展,无需像 vector 那样重新分配并复制整个内存块
- 仍保持随机访问能力,时间复杂度为 O(1)
但也有局限:
- 内部结构较复杂,可能不如 vector 缓存友好
- 迭代器稳定性在某些插入操作下可能受影响(特别是中间插入)
- 不保证所有元素在连续内存中存储
适合用于实现双端队列、滑动窗口、任务调度等需要频繁在两端操作的场景。
基本上就这些。deque 是一个功能强大且灵活的容器,合理使用能提升程序效率。掌握它的操作和特点,有助于写出更高效的 C ++ 代码。