当前位置: 首页 > news >正文

C++引用与指针:核心区别全解析

一、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,遍历写法通用
http://www.jsqmd.com/news/739718/

相关文章:

  • 从功能与体验选学习机,五一重护眼、AI、纯净度,兼顾长期价值 - 海淀教育研究小组
  • 【Backend Flow工程实践 18】Clock Tree:为什么时钟网络不是普通 net,而是后端实现的节奏系统?
  • 在Taotoken模型广场中根据任务与预算挑选合适的大模型
  • 如何快速构建企业级表单:JSON Form从基础到实战的完整指南
  • Fui社区生态:如何参与项目开发和获取技术支持
  • Zigbee vs Wi-Fi——两种世界观:同一频段下的不同取舍
  • 信奥赛CSP-J复赛集训(DP专题)(24):出租车拼车
  • 如何快速部署智能交通分析系统:用PyTorch视觉模型库实现高效车辆识别
  • 5G NR里那个默默救场的HARQ,到底是怎么把丢了的包‘拼’回来的?
  • 告别官网!在PyCharm里直接调ChatGPT写代码,这个插件真香(附完整配置流程)
  • 别再手动调动画了!Blender 3.6 自动关键帧与插值曲线实战,5分钟做出丝滑运动
  • 如何快速上手Transitioner:5分钟创建惊艳视图过渡效果
  • 基于Next.js与GraphQL的自建博客系统Letterpad部署与深度定制指南
  • 从内容与教研看学习机,五一选 “真自研”,拒绝碎片化资源 - 海淀教育研究小组
  • 探索IPXWrapper:为现代Windows系统重建经典游戏网络桥梁
  • Photoshop AI革命:5分钟打通创意与技术的SD-PPP完整指南
  • 保姆级教程:解决ORB-SLAM2编译PCL报错与段错误闪退(含C++14、-march=native全攻略)
  • 抖音视频下载终极指南:3步免费获取无水印高清内容
  • ANSYS循环载荷仿真全解析
  • 对比直接使用官方 API 体验 Taotoken 在接入便捷性上的优势
  • OpenRocket:5步从零开始设计你的第一枚火箭模型
  • 手把手教你用MATLAB/Simulink复现同步发电机三相短路仿真(附完整代码与模型)
  • 终极指南:Dgraph分布式锁性能优化的5种设计模式解析
  • 番茄小说下载器:打造你的个人专属离线图书馆
  • 如何用League Akari智能游戏助手提升英雄联盟游戏体验:5个核心功能详解
  • Termux终极安全事件响应指南:从崩溃检测到用户通知的完整流程
  • 2026年4月评价好的二手路虎系列销售企业推荐,二手路虎系列销售供应商有哪些,完善售后让二手车买卖无担忧 - 品牌推荐师
  • 解构哔哩下载姬:从技术架构到高效工作流的深度实践
  • Stripe Ruby 库性能优化实战:5个实用技巧减少延迟和提升吞吐量
  • VisualCppRedist AIO:5分钟彻底解决Windows软件DLL缺失问题的终极指南