转载来自大佬:http://blog.csdn.net/morewindows/article/details/6946811

deque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删除元素,deque在接口上和vector非常相似,下面列出deque的常用成员函数:

deque的实现比较复杂,内部会维护一个map(注意!不是STL中的map容器)即一小块连续的空间,该空间中每个元素都是指针,指向另一段(较大的)区域,这个区域称为缓冲区,缓冲区用来保存deque中的数据。因此deque在随机访问和遍历数据会比vector慢。具体的deque实现可以参考《STL源码剖析》,当然此书中使用的SGI STL与VS2008所使用的PJ STL的实现方法还是有区别的。下面给出了deque的结构图:

由于篇幅问题,deque的实现细节就不再深入了,下面给出deque的使用范例:

[cpp] view plain copy
  1. //双向队列 deque
  2. //by MoreWindows http://blog.csdn.net/morewindows
  3. #include <deque>
  4. #include <cstdio>
  5. #include <algorithm>
  6. using namespace std;
  7. int main()
  8. {
  9. deque<int> ideq(20); //Create a deque ideq with 20 elements of default value 0
  10. deque<int>::iterator pos;
  11. int i;
  12. //使用assign()赋值  assign在计算机中就是赋值的意思
  13. for (i = 0; i < 20; ++i)
  14. ideq[i] = i;
  15. //输出deque
  16. printf("输出deque中数据:\n");
  17. for (i = 0; i < 20; ++i)
  18. printf("%d ", ideq[i]);
  19. putchar('\n');
  20. //在头尾加入新数据
  21. printf("\n在头尾加入新数据...\n");
  22. ideq.push_back(100);
  23. ideq.push_front(i);
  24. //输出deque
  25. printf("\n输出deque中数据:\n");
  26. for (pos = ideq.begin(); pos != ideq.end(); pos++)
  27. printf("%d ", *pos);
  28. putchar('\n');
  29. //查找
  30. const int FINDNUMBER = 19;
  31. printf("\n查找%d\n", FINDNUMBER);
  32. pos = find(ideq.begin(), ideq.end(), FINDNUMBER);
  33. if (pos != ideq.end())
  34. printf("find %d success\n", *pos);
  35. else
  36. printf("find failed\n");
  37. //在头尾删除数据
  38. printf("\n在头尾删除数据...\n");
  39. ideq.pop_back();
  40. ideq.pop_front();
  41. //输出deque
  42. printf("\n输出deque中数据:\n");
  43. for (pos = ideq.begin(); pos != ideq.end(); pos++)
  44. printf("%d ", *pos);
  45. putchar('\n');
  46. return 0;
  47. }

运行结果如下:

另外要注意一点。对于deque和vector来说,尽量少用erase(pos)和erase(beg,end)。因为这在中间删除数据后会导致后面的数据向前移动,从而使效率低下。

deque(双向队列)相关推荐

  1. STL系列之一 deque双向队列

    原文地址:http://blog.csdn.net/morewindows/article/details/6946811 deque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删 ...

  2. C++ Deque(双向队列

    C++ Deque(双向队列) C++ Deque(双向队列) 是一种优化了的.对序列两端元素进行添加和删除操作的基本序列容器.它允许较为快速地随机访问,但它不像vector 把所有的对象保存在一块连 ...

  3. 【转载】deque双向队列

    继vector和queue之后,又发现一个很好用的东西. 本篇转载自http://blog.csdn.net/morewindows/article/details/6946811 deque双向队列 ...

  4. deque双向队列的使用

    Deque的使用 /*** Retrieves and removes the first element of this deque,* or returns {@code null} if thi ...

  5. python队列来做什么_简单介绍python的双向队列

    介绍 大家都知道利用 .append 和 .pop 方法,我们可以把列表当作栈或者队列来用(比如,把 append 和 pop(0) 合起来用,就能模拟栈的"先进先出"的特点).但 ...

  6. STL中的双向队列deque

    1.STL中的双向队列deque deque也是顺序容器的一种,同时也是一个可变长数组.要使用deque,需要包含头文件deque.所有适用于vector的操作都适用于deque. deque和vec ...

  7. python3 deque(双向队列)

    转载:https://www.cnblogs.com/zhenwei66/p/6598996.html 创建双向队列 import collections d = collections.deque( ...

  8. python collections模块(数据结构常用模块)计数器Counter 双向队列deque 默认字典defaultdict 有序字典OrderedDict 可命名元组namedtuple

    collections 模块----Python标准库,是数据结构常用模块 常用类型有: 计数器(Counter) 双向队列(deque) 默认字典(defaultdict) 有序字典(Ordered ...

  9. Deque(双向队列 c++模版实现 算法导论第三版第十章10.1-5题)

    Deque(双向队列 c++模版实现 ) 算法导论第三版第十章10.1-5题 #ifndef C11LEARN_DEQUE_H #define C11LEARN_DEQUE_H template< ...

  10. 实验8.3 C++标准模板库(STL)中的双向队列类(deque)

    题目 使用C++标准模板库(STL)中的双向队列类(deque)重新实现上一小题. C++代码如下: #include <iostream> #include <deque> ...

最新文章

  1. JSP笔记-点击量统计
  2. Apache,php配置
  3. PHP如何设置页码间距,PHP如何实现对work文档操作,返回文档的总页码数量
  4. 2016全国大学生计算机设计大赛,2016年“第9届中国大学生计算机设计大赛”闭幕...
  5. makefile编译erlang
  6. 徐州初中计算机学校排名2015,徐州初中学校排名,徐州重点初中排名详细榜单
  7. 在Ubuntu下进行MongoDB安装步骤
  8. spring整合应用安全框架Shiro
  9. div+css经典三行两列布局
  10. vr降噪器英文是什么_耳机降噪功能这么多,说说什么是ANC、ENC、CV...
  11. 这10道大厂Java面试题,我敢打赌90%的人都不会!!!
  12. PHP网站安装程序制作的原理、步骤、注意事项和示例代码
  13. EVE上传Dynamips、IOL和QEMU镜像
  14. visual studio 2015 比较代码差异的几种方法
  15. 摆脱某某助手,使用无线投屏功能共享安卓屏幕到PC
  16. html制作问卷调查,如何通过jQuery制作一个在线问卷调查
  17. 儿童学计算机编程好处,儿童学习编程有什么好处
  18. android 键盘遮挡
  19. 华大MCU-----进入深度睡眼不能下载程序
  20. 云之讯融合通讯开放平台_提供融合语音,短信,VoIP,视频和IM等通讯API及SDK。...

热门文章

  1. 水晶报表中的主从表结构
  2. [ NOI 2005 ] 聪聪与可可
  3. 添加地图图例 Arcengine+C#
  4. 信息文档分工会在运动会象棋比赛中夺得佳绩
  5. shell编程(精华总结版)
  6. EXT.NET GridPanel默认选中多行
  7. 前端开发负责人修炼指北
  8. vue2.0一起在懵逼的海洋里越陷越深(二)
  9. redis运维问题集锦FAQ
  10. 深入浅出JavaScript (四)DHTML