原文地址: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 plaincopy
  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)。因为这在中间删除数据后会导致后面的数据向前移动,从而使效率低下。

STL系列之一 deque双向队列相关推荐

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

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

    双向队列(STL做法) 双向队列 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述 想想双向链表--双向队列的定义差点儿相同,也 ...

  8. python3 deque(双向队列)

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

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

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

最新文章

  1. python celery
  2. 【UOJ#388】【UNR#3】配对树(线段树,dsu on tree)
  3. docker 部署nginx
  4. 线性表的顺序存储——顺序存储结构的抽象实现
  5. vscode python环境_在vscode中配置python环境
  6. java 累进计费率计算_设计费400万,缴纳所得税100万,如何筹划
  7. 2019年北京高校毕业生就业质量状况:四成博士去了高校
  8. 高性能Web动画和渲染原理系列(2)——渲染管线和CPU渲染
  9. SMB/CIFS--NetBOIS/Browser/NBNS 协议
  10. ENVI/IDL 批量裁剪同一地区的多幅影像-第五篇
  11. 线上收单和线下收单的区别
  12. 技术面试时该反问面试官什么问题?
  13. 百度 android 市场占有率,2019百度 排行榜_2019安卓应用市场排行榜Top10
  14. 手工轻松发送匿名邮件
  15. 粒子群算法查找函数最小值
  16. 巴特沃斯数字低通滤波器的设计
  17. 合宙模块LUA相关资料汇总
  18. Latex/WinEdt中文编辑
  19. 中国高空作业平台何时摆脱外国的影子
  20. ESP32联网-MQTT-连接到本地服务器(LInux)

热门文章

  1. 数据库-优化-MYSQL的执行顺序
  2. 数据库-优化-子查询优化
  3. 设计模式之_Strategy_06
  4. ad09只在一定范围内查找相似对象_kafka日志段中的二分查找
  5. Redis持久化方式的选择
  6. (超详细版)Linux下Hadoop2.7.1集群环境的搭建(3台为例)
  7. 动态给组件添加背景,一半圆角
  8. 操作主机 Infrastructure Master[为企业维护windows server 2008系列八]
  9. [Bootstrap]全局样式(四)
  10. Android开发之Intent.Action