信息发布→ 登录 注册 退出

c++中deque容器的使用方法_C++双端队列的常用操作与特性

发布时间:2025-11-07

点击量:
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 

定义方式如下:

std::deque dq;           // 存储int类型的双端队列
std::deque words; // 存储字符串的双端队列

常用操作方法

1. 元素插入
可以在队列前端或后端添加元素:

  • 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。

3. 访问元素
支持随机访问和首尾访问:

  • dq.front():返回第一个元素的引用
  • dq.back():返回最后一个元素的引用
  • dq[i]dq.at(i):访问索引i处的元素(at会做越界检查)

4. 容量相关操作

  • dq.empty():判断是否为空,返回bool
  • dq.size():返回当前元素个数
  • dq.clear():清空所有元素

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++代码。

标签:# 迭代  # 会做  # 可通过  # 也有  # 头文件  # 是一个  # 返回值  # 遍历  # 第一个  # word  # 接口  # 数据结构  # bool  # c++  #   # 后端  # 前端  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!