deque(双向队列)
转载来自大佬: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的使用范例:
- //双向队列 deque
- //by MoreWindows http://blog.csdn.net/morewindows
- #include <deque>
- #include <cstdio>
- #include <algorithm>
- using namespace std;
- int main()
- {
- deque<int> ideq(20); //Create a deque ideq with 20 elements of default value 0
- deque<int>::iterator pos;
- int i;
- //使用assign()赋值 assign在计算机中就是赋值的意思
- for (i = 0; i < 20; ++i)
- ideq[i] = i;
- //输出deque
- printf("输出deque中数据:\n");
- for (i = 0; i < 20; ++i)
- printf("%d ", ideq[i]);
- putchar('\n');
- //在头尾加入新数据
- printf("\n在头尾加入新数据...\n");
- ideq.push_back(100);
- ideq.push_front(i);
- //输出deque
- printf("\n输出deque中数据:\n");
- for (pos = ideq.begin(); pos != ideq.end(); pos++)
- printf("%d ", *pos);
- putchar('\n');
- //查找
- const int FINDNUMBER = 19;
- printf("\n查找%d\n", FINDNUMBER);
- pos = find(ideq.begin(), ideq.end(), FINDNUMBER);
- if (pos != ideq.end())
- printf("find %d success\n", *pos);
- else
- printf("find failed\n");
- //在头尾删除数据
- printf("\n在头尾删除数据...\n");
- ideq.pop_back();
- ideq.pop_front();
- //输出deque
- printf("\n输出deque中数据:\n");
- for (pos = ideq.begin(); pos != ideq.end(); pos++)
- printf("%d ", *pos);
- putchar('\n');
- return 0;
- }
运行结果如下:
另外要注意一点。对于deque和vector来说,尽量少用erase(pos)和erase(beg,end)。因为这在中间删除数据后会导致后面的数据向前移动,从而使效率低下。
deque(双向队列)相关推荐
- STL系列之一 deque双向队列
原文地址:http://blog.csdn.net/morewindows/article/details/6946811 deque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删 ...
- C++ Deque(双向队列
C++ Deque(双向队列) C++ Deque(双向队列) 是一种优化了的.对序列两端元素进行添加和删除操作的基本序列容器.它允许较为快速地随机访问,但它不像vector 把所有的对象保存在一块连 ...
- 【转载】deque双向队列
继vector和queue之后,又发现一个很好用的东西. 本篇转载自http://blog.csdn.net/morewindows/article/details/6946811 deque双向队列 ...
- deque双向队列的使用
Deque的使用 /*** Retrieves and removes the first element of this deque,* or returns {@code null} if thi ...
- python队列来做什么_简单介绍python的双向队列
介绍 大家都知道利用 .append 和 .pop 方法,我们可以把列表当作栈或者队列来用(比如,把 append 和 pop(0) 合起来用,就能模拟栈的"先进先出"的特点).但 ...
- STL中的双向队列deque
1.STL中的双向队列deque deque也是顺序容器的一种,同时也是一个可变长数组.要使用deque,需要包含头文件deque.所有适用于vector的操作都适用于deque. deque和vec ...
- python3 deque(双向队列)
转载:https://www.cnblogs.com/zhenwei66/p/6598996.html 创建双向队列 import collections d = collections.deque( ...
- python collections模块(数据结构常用模块)计数器Counter 双向队列deque 默认字典defaultdict 有序字典OrderedDict 可命名元组namedtuple
collections 模块----Python标准库,是数据结构常用模块 常用类型有: 计数器(Counter) 双向队列(deque) 默认字典(defaultdict) 有序字典(Ordered ...
- Deque(双向队列 c++模版实现 算法导论第三版第十章10.1-5题)
Deque(双向队列 c++模版实现 ) 算法导论第三版第十章10.1-5题 #ifndef C11LEARN_DEQUE_H #define C11LEARN_DEQUE_H template< ...
- 实验8.3 C++标准模板库(STL)中的双向队列类(deque)
题目 使用C++标准模板库(STL)中的双向队列类(deque)重新实现上一小题. C++代码如下: #include <iostream> #include <deque> ...
最新文章
- JSP笔记-点击量统计
- Apache,php配置
- PHP如何设置页码间距,PHP如何实现对work文档操作,返回文档的总页码数量
- 2016全国大学生计算机设计大赛,2016年“第9届中国大学生计算机设计大赛”闭幕...
- makefile编译erlang
- 徐州初中计算机学校排名2015,徐州初中学校排名,徐州重点初中排名详细榜单
- 在Ubuntu下进行MongoDB安装步骤
- spring整合应用安全框架Shiro
- div+css经典三行两列布局
- vr降噪器英文是什么_耳机降噪功能这么多,说说什么是ANC、ENC、CV...
- 这10道大厂Java面试题,我敢打赌90%的人都不会!!!
- PHP网站安装程序制作的原理、步骤、注意事项和示例代码
- EVE上传Dynamips、IOL和QEMU镜像
- visual studio 2015 比较代码差异的几种方法
- 摆脱某某助手,使用无线投屏功能共享安卓屏幕到PC
- html制作问卷调查,如何通过jQuery制作一个在线问卷调查
- 儿童学计算机编程好处,儿童学习编程有什么好处
- android 键盘遮挡
- 华大MCU-----进入深度睡眼不能下载程序
- 云之讯融合通讯开放平台_提供融合语音,短信,VoIP,视频和IM等通讯API及SDK。...