STL系列之一 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)。因为这在中间删除数据后会导致后面的数据向前移动,从而使效率低下。
STL系列之一 deque双向队列相关推荐
- 实验8.3 C++标准模板库(STL)中的双向队列类(deque)
题目 使用C++标准模板库(STL)中的双向队列类(deque)重新实现上一小题. C++代码如下: #include <iostream> #include <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 ...
- 双向队列(STL做法)
双向队列(STL做法) 双向队列 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描写叙述 想想双向链表--双向队列的定义差点儿相同,也 ...
- 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 ...
最新文章
- python celery
- 【UOJ#388】【UNR#3】配对树(线段树,dsu on tree)
- docker 部署nginx
- 线性表的顺序存储——顺序存储结构的抽象实现
- vscode python环境_在vscode中配置python环境
- java 累进计费率计算_设计费400万,缴纳所得税100万,如何筹划
- 2019年北京高校毕业生就业质量状况:四成博士去了高校
- 高性能Web动画和渲染原理系列(2)——渲染管线和CPU渲染
- SMB/CIFS--NetBOIS/Browser/NBNS 协议
- ENVI/IDL 批量裁剪同一地区的多幅影像-第五篇
- 线上收单和线下收单的区别
- 技术面试时该反问面试官什么问题?
- 百度 android 市场占有率,2019百度 排行榜_2019安卓应用市场排行榜Top10
- 手工轻松发送匿名邮件
- 粒子群算法查找函数最小值
- 巴特沃斯数字低通滤波器的设计
- 合宙模块LUA相关资料汇总
- Latex/WinEdt中文编辑
- 中国高空作业平台何时摆脱外国的影子
- ESP32联网-MQTT-连接到本地服务器(LInux)
热门文章
- 数据库-优化-MYSQL的执行顺序
- 数据库-优化-子查询优化
- 设计模式之_Strategy_06
- ad09只在一定范围内查找相似对象_kafka日志段中的二分查找
- Redis持久化方式的选择
- (超详细版)Linux下Hadoop2.7.1集群环境的搭建(3台为例)
- 动态给组件添加背景,一半圆角
- 操作主机 Infrastructure Master[为企业维护windows server 2008系列八]
- [Bootstrap]全局样式(四)
- Android开发之Intent.Action