deque是一个双向队列,优化了对序列两端元素进行添加和删除操作的基本序列容器。通常由一些独立的区块组成,第一个区块朝某方向发展,最后一个区块朝另一个方向发展。它允许较为快速地随机访问但它不像vector一样把所有对象保存在一个连续的内存块,而是多个连续的内存块。并且在一个映射结构中保存对这些块以及顺序的跟踪。

deque的特点:

1、支持随机访问,即支持[]以及at(),但是性能没有vector好

2、可以在内部进行插入和删除操作,但性能不及list。

deque和vector的不同之处:

1、deque两端都能够快速的插入和删除元素。vector只能在尾端进行。

2、deque的元素存取和迭代器操作会稍微慢一些。因为deque的内部结构会多一个简介过程。

3、迭代器时特殊的智能指针,而不是一般指针。它需要在不同的区块之间跳转。

4、deque可以包含更多的元素,其max_size可能更大。因为不止使用一块内存。

5、不支持对容量和内存分配时机的控制。

容器的选择:

1、强调快速随机访问,则vector比list好得多。

2、已知要存储元素的个数。vector好于list。

3、强调增删且不要在两端插入修改元素,则list显然要比vector好。

4、除非我们需要在容器首部插入和删除元素,deque好于vector。

实例:

插入操作:

deque<string> dec;
dec.push_back("hello");   //尾部插入
dec.push_front("world");  //头部插入
//insert操作
//iterator insert (iterator position, const value_type& val);
dec.insert(dec.end(), "aaaaaa");
//void insert (iterator position, size_type n, const value_type& val);
dec.insert(dec.end(), 5, "bbb");
//void insert (iterator position, InputIterator first, InputIterator last);
deque<string> t_dec(2,"ccc");
dec.insert(dec.end(), t_dec.begin(), t_dec.end());

删除操作:

dec.pop_back();  //尾部删除
dec.pop_front();  //头部删除//erase操作
//iterator erase (iterator position);
dec.erase(dec.begin());
//iterator erase (iterator first, iterator last);
dec.erase(dec.end()-3, dec.end());
//删除指定元素
deque<string>::iterator iter;
for(iter = dec.begin(); iter != dec.end(); )
{if(*iter == "bbb"){iter = dec.erase(iter);}else{++iter;}
} 
dec.back();  //返回最后一个元素
dec.front();  //返回第一个元素
dec.empty();  //判断是否为空//调整容器大小,不足以参数2补充
dec.resize(5);
dec.resize(5,"hello");dec.size();  //容器大小
deque<string> s_dec;
swap(s_dec, dec);  //交换容器内容
s_dec.swap(dec);   //交换容器内容
dec.clear();  //清空
//反序输出
deque<string>::reverse_iterator rit;
for(rit = dec.rbegin(); rit != dec.rend(); ++rit)
{cout<<*rit<<endl;
}

参考:

https://blog.csdn.net/xiajun07061225/article/details/7442816

https://www.cnblogs.com/engineerLF/p/5393006.html

http://www.cplusplus.com/reference/deque/deque/

C++deque介绍相关推荐

  1. [C++](13)stack queue priority_queue 模拟实现:容器适配器,deque介绍,仿函数详解

    文章目录 使用 stack 栈 queue 队列 priority_queue 优先级队列 什么是容器适配器? deque 容器简单介绍 模拟实现 stack queue priority_queue ...

  2. STL的Deque介绍

    Deque是双端队列,在画动态图表的时候使用起来比较方便.因为当数据填满图表后,需要从队列的后方插入一个元素,然后再从队列的前方删除一个元素.使用Deque可以很方便的做到.使用push(pop)-b ...

  3. C++小工进阶之路 XV(list总结以及deque介绍)

    在list类中,因为list底层使用的是带头结点的双向循环链表,所以list这个容器的迭代器既有++操作,又有--操 作,但是对于forward list来时底层是单链表,所以模拟实现的时候只有迭代器 ...

  4. python collections 模块中的 deque

    collections.deque介绍 collections 是 python 内建的一个集合模块,里面封装了许多集合类,其中队列相关的集合只有一个:deque. deque 是双边队列(doubl ...

  5. python队列(deque)

    collections.deque介绍 collections 是 python 内建的一个集合模块,里面封装了许多集合类,其中队列相关的集合只有一个:deque. deque 是双边队列(doubl ...

  6. C++常用STL库详细总结

    C++STL库函数总结 #include< algorithm >库函数 1.sort排序 2.reverse倒转 3.unique去重 4.二分查找 5.find函数查找 6.字符串和整 ...

  7. 竞赛中的STL库函数使用

    简单的介绍一下STL的用法 看起来内容很多 只要遇到对应的题写个几题 很容易就熟能生巧了 为何cpp是竞赛使用最为广泛的语言呢 1 速度快 2 STL强大 因此掌握好STL 一定能让你做题的效率更上一 ...

  8. Python deque的用法介绍

    Python deque的用法介绍 deque 是Python标准库 collections 中的一个类,实现了两端都可以操作的队列,相当于双端队列,与Python的基本数据类型列表很相似. Pyth ...

  9. [C++STL]deque容器用法介绍

    代码如下: #include <iostream> #include <string> #include <deque> using namespace std;v ...

最新文章

  1. BZOJ4237 JOISC2014 稻草人 CDQ分治、单调栈
  2. fc-ae-1553_什么是AE-L,AF-L和*按钮,它们的作用是什么?
  3. 求求你把输入法调小一点... | 今日最佳
  4. ACL'21 | 弱标签的垃圾数据,也能变废为宝!
  5. Problem C: 判断字符串是否为回文
  6. 数据库索引统计信息不一致_列存储索引增强功能–克隆数据库中的索引统计信息更新
  7. LVS小型系统架构搭建笔记
  8. 窗口潜水面罩行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  9. linux系统里route -n不起作用,Linux系统中traceroute命令使用详解
  10. localhost:8080
  11. 查看电脑是否开启虚拟化
  12. java中String转Long类型
  13. codeblocks不支持16位,与64位不兼容这个问题
  14. 网络安全与计算机信息管理论文,计算机信息管理技术在网络安全的应用论文
  15. IBM面试题:海盗分金算法及其思想
  16. 禅道 php7.1,Centos7安装PHP7 + 禅道(Nginx 1.18 + PHP7.2)
  17. 「开发者说」多系统集成开发-企业自有系统快速上钉钉
  18. 6_计算机网络_应用层-HTTP-DNS-跳板机
  19. springboot下配置druid监控
  20. 水果店微信小程序开发_分享水果店做微信小程序的好处

热门文章

  1. 【ZT】诺亚34亿爆雷,到底谁在说谎?(双录)
  2. linux传统方式挂载新硬盘并进行分区格式化
  3. 移动端mobiscroll时间控件的使用
  4. 系列三、机械键盘(IKBC)Win + [D/E]等快捷建失效
  5. QT应用编程:基于VLC开发音视频播放器(回调方式)
  6. 计算机毕业设计 - ssm+vue大学生在线兼职发布与管理平台(源码+论文)
  7. 【01】一起学ASP之《ASP.NET MVC企业级实战》
  8. java console清屏_JAVA 控制台清屏 | 学步园
  9. 代码随想录刷题|LeetCode 1049. 最后一块石头的重量II 494. 目标和 474.一和零
  10. 青岛旅游学校计算机证书,【我和我的旅校】青岛旅游学校优秀毕业生——王子然...