双端队列的简单认识

双端队列是动态大小的序列式容器,其可以像两端进行伸缩。

特定的库可以以不同的方式实现deque,但通常都是一种动态数组。不论在何种情况下,它都允许通过随机访问迭代器直接访问单个元素,可以根据需要动态的伸缩。因此,deque提供了一些与vector相似的功能,但deque在头部和尾部进行数据插入和删除操作更加高效。与vector不同的是,deque不能保证所有的元素存储在连续的空间中,在deque中通过指针加偏移量方式访问元素可能会导致非法的操作。vector与list提供了相似的接口,因此其具有类似的用途,但是内部的实现原理不同:vector使用使用了动态数组,该数组通常需要动态增长;deque中的元素可能分散在不同的存储块中,在deque中保存了一些必要的信息,通常用来在常数范围内直接访问deque中的任何一个元素,所以deque的内部实现比vector复杂,但是这些额外信息使得deque在某些情况下增长更加的高效,特别是在序列比较大,重新分配成本比较高的情况下。除了在频繁在头部或尾部进行插入和删除操作外,deque比list和forward_list的性能更差。

双端队列中实际上是一个vector,这个vector中的元素都是指针,而指针指向的地方,才是真正存放数据的地方。

deque的迭代器
cur:指向当前访问的元素
first:指向当前数据存在的缓冲区的首地址
last:指向当前数据存在的缓冲区的末尾
node:指向容器中的某一节点,表示该迭代器属于某一指针的

deque与其他容器比较的优缺点

与vector比较
deque的优势是:头部插入和删除时,不需要搬移元素,效率特别高,而且在扩容时,也不 需要搬移大量的元素,因此其效率是必vector高的。

与list比较
deque的优势是:其底层是连续空间,空间利用率比较高,不需要存储额外字段

deque缺陷:
不适合遍历,因为在遍历时,deque的迭代器要频繁的去检测其是否移动到某段小空间的边界,导致效率低下,而序列式场景中,可能需要经常遍历,因此在实际中,需要线性结构时,大多数情况下优先考虑vector和list,deque的应用并不多,而目前能看到的一个应用就是,STL用其作 为stack和queue的底层数据结构

C++ 双端队列deque相关推荐

  1. C++ 双端队列(deque)的使用

    双端队列(deque)是什么 双端队列(deque)是一种随机访问的数据类型,提供了在序列两端快速插入和删除的功能,deque类似于vector, 双端队列(deque)属于STL(Standard ...

  2. c++ 双端队列 deque 之 (头部、尾部)插入元素/删除元素/

    头文件     #include <deque> 和vector用法基本相同 没有 capacity() reserve() 有了push_back(),pop_back() //inse ...

  3. 6-5-2:STL之stack和queue——双端队列deque

    文章目录 双端队列-deque 双端队列-deque deque是一种双向开口的连续线性空间.所谓双向开口,意思就是可以在头尾两端分别进行元素的插入和删除操作 deque的出现是为了解决融合vecto ...

  4. [转载] Python的双端队列deque

    参考链接: Python中的双端队列DeQue Python的强大并不在于它的语法,而在于它的库,当你对各种数据结构感到苦恼时,Python提供了各种开箱即用的数据结构. 数据结构中最常讲授的数据结构 ...

  5. 队列(queue)与双端队列(deque)—Python实现方法及回文词应用

    队列 Queue 抽象数据类型Queue:一个有次序的数据集合,数据项仅从 尾(rear) 端添加,且仅从 首(front) 端移除,具有 "FIFO" 的特点. 需要实现的操作: ...

  6. STL之双端队列deque:新手入门,基础应用

    STL之双端队列deque:新手入门,基础应用 简单的自我介绍 STL之deque:基本函数的运用 源代码 运行结果 结尾 简单的自我介绍 一名努力学习code的计算机专业大二在校学生,平时不论是完成 ...

  7. 【C++】STL常用容器总结之五:双端队列deque

    6.双端队列deque 所谓的deque是"double ended queue"的缩写,双端队列不论在尾部或头部插入元素,都十分迅速.而在中间插入元素则会比较费时,因为必须移动中 ...

  8. java lifo 队列_1.8 Java 队列 Queue、双端队列 Deque - Java 知识总结与学习

    queue 在java5中新增加了java.util.Queue接口,用以支持队列的常见操作.该接口扩展了java.util.Collection接口.除了基本的 Collection 操作外,队列还 ...

  9. Java双端队列Deque及其应用

    目录 1.Deque的概念 2.双端队列操作 3.双端队列演示示例 4.双端队列典型应用(滑动窗口/单调栈问题) 1.Deque的概念 双向队列:支持在首尾插入和删除元素的线性集合.它具有既具有FIF ...

最新文章

  1. 查看mysql数据库及表编码格式
  2. 皮一皮:碰到这样的领导怎么办...
  3. K8S滚动更新示例演示
  4. eDMA结构及工作机理的简单介绍
  5. Mysql和Oracle获取自增主键
  6. 使用dict和set
  7. selenium自动化测试_Selenium测试可实现有效的测试自动化
  8. 一般区域二重、三重积分MATLAB计算方法
  9. mysql 分段执行_了解一下项目中常用的19条MySQL优化
  10. Java检查字符串是否包含中文字符
  11. 常用的php类、方法、函数 注释标记
  12. 网关报错:com.netflix.zuul.exception.ZuulException: Filter threw Exception,调用服务和网关陷入死循环,重复报相同的错误
  13. 百度祝恒书:百度智能招聘技术和应用实践
  14. pytho lambda表达式
  15. python目前版本强势英雄_王者荣耀:目前版本最强势的英雄有哪些,元歌必须上榜...
  16. 《Kubernetes知识篇:基于Namespace(多租户)进行资源配额管理》
  17. 在HTML中怎么去掉超链接(标签 a)的下划线?
  18. Javascirpt正则表达式知识归纳
  19. jmap:java内存映像工具【详细】
  20. 2015年本科毕业第一份工作

热门文章

  1. winxp一键锁定计算机,WinXP下锁定计算机的3种方法
  2. java工具类使用_Java工具类使用注意事项
  3. php 外贸,php 外贸
  4. c++ datetime mysql_转:C++操作mysql方法总结(1)
  5. 5 可隐藏的侧栏_家居中5种隐藏式设计,实用、高级、省空间
  6. 什么叫做展望_在迷茫的时代,选择相信:关于2021经济的一些展望。
  7. php学语法,PHP入门学习——PHP语法
  8. 部署 Job (第一部分)
  9. FusionChartsFree免费的报表
  10. SpringBoot+SpringCloud —— 使用Feign消费服务