C++引用与指针:核心区别全解析
2026/5/5 14:40:47 网站建设 项目流程

一、deque 是什么

deque 全称:double-ended queue 双端队列特点:

  1. 可以在头部、尾部都快速插入、删除
  2. 支持随机访问,像数组一样能用下标[]
  3. 底层不是连续一块内存,是分段连续空间
  4. 相比 vector:头尾操作更快,中间插入依然慢

头文件:

#include <deque> using namespace std;

二、deque 初始化四种方式

// 1. 空容器 deque<int> d1; // 2. 5个元素,默认0 deque<int> d2(5); // 3. 5个元素,初始值都是8 deque<int> d3(5, 8); // 4. 直接列表初始化 deque<int> d4 = {1,2,3,4,5};

三、deque 核心增删接口

1. 头尾插入

deque<int> d; d.push_back(10); // 尾部加 d.push_front(20); // 头部加 d.push_back(30);

2. 头尾删除

d.pop_back(); // 删尾 d.pop_front(); // 删头

3. 取值与修改

支持下标随机访问:

cout << d[0]; d[1] = 66;

4. 容量与清空

cpp

运行

d.size(); // 元素个数 d.empty(); // 判断是否为空 d.clear(); // 清空所有元素

四、三种遍历方式

1. 下标遍历

for(int i = 0; i < d.size(); i++) { cout << d[i] << " "; }

2. 迭代器遍历(STL 标准)

for(deque<int>::iterator it = d.begin(); it != d.end(); it++) { cout << *it << " "; }

3. 范围 for 遍历(最简)

for(int x : d) { cout << x << " "; }

五、完整示例代码

#include <iostream> #include <deque> using namespace std; int main() { deque<int> d; // 头尾插入 d.push_back(1); d.push_back(2); d.push_front(100); d.push_front(200); cout << "遍历所有元素:"; for(int val : d) { cout << val << " "; } cout << endl; // 删除头尾 d.pop_front(); d.pop_back(); cout << "删除后:"; for(int val : d) { cout << val << " "; } return 0; }

输出:

遍历所有元素:200 100 1 2 删除后:100 1

六、vector vs deque 核心对比

表格

特性vectordeque
底层结构连续内存数组分段块内存
尾部增删极快
头部增删很慢(整体后移)极快
随机访问支持 []支持 []
中间插入
适用场景纯尾部操作、随机访问多需要频繁头尾增删

七、新手易错点

  1. 误以为 deque 中间插入很快(依然很慢)
  2. 混用push_front / pop_front忘记是 deque 专属,vector 没有
  3. 迭代器遍历中频繁增删,导致迭代器失效
  4. 分不清什么时候选 vector、什么时候选 deque

八、今日总结

  1. deque 是双端队列,头尾都能高效增删
  2. 支持下标随机访问,用法和 vector 很像
  3. 独有接口:push_front / pop_front
  4. 头尾操作多选 deque,只在尾部操作用 vector
  5. 同样支持迭代器、范围 for,遍历写法通用

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询