STL_deque双端队列
deque:元素数据采用分块的线性结构存储。若干线性存储块成为deque块。一般大小为512字节,元素的数据类型所占用的字节数,决定了每个deque块可容纳的元素个数。
所有的deque块使用一个Map块管理,每个Map数据项记录各个deque块的首地址。Map是deque的中心部件,先于deque块依照deque元素的个数计算出deque块数,作为Map块的数据项数,创建Map块。以后,每创建一个deque块,都将deque块的首地址存入Map的相应数据项中。
deque使用了两个迭代器M_start,M_finish,对首个deque块和末deque块进行控制访问。迭代器包含4个变量域,M_first,M_last,M_cur,M_node。M_first和M_last分别指向该deque块的首尾元素地址(M_last实际指向deque块末尾字节地址,即尾后),M_cur存放当前访问的deque双端队列的元素地址,M_node存放当前deque块的Map数据项地址。

各个类:
Deque_iterator类:迭代器类,包含迭代器中四个数据项,以及迭代器的*,->操作,++,--操作等。
Deque_alloc_base类:deque块和Map块内存的创建和释放函数类,包含存放Map块的首地址,deque块数,deque块内存分配器,Map块内存分配器,以及deque,Map的分配和释放函数等。
Deque_base,继承自Deque_alloc_base类:定义了迭代器M_start,M_finish,提供了创建Map块和相关deque块的M_initialize_map函数(其中调用自己的deque块创建函数),和释放deque块函数。
M_initialize_map函数中(参数提供所有元素个数):计算需要deque块数(至少一块)->计算Map块项数(至少8项,超过则至少头尾都预留一空项)->分配map内存->设置Map首尾项地址->调用deque块创建函数,按照Map首尾项迭代依次指向->设置迭代器的所在块和指向当前元素。
deque类,继承自Deque_base类:实现获取队首队尾元素,deque块数,是否为空,队首队尾入队出队等等。
deque应用:
创建deque对象:deque(); deque(n);dque(n,const T& value);deque(const deque&);deque(first,last)
初始化赋值:push_back()
元素遍历:iterator begin();iterator end();reverse_iterator rbegin();reverse_iterator rend();
元素插入:push_front(const T&), insert(iterator pos, const T&);
元素删除:pop_front(),pop_back(),erase(iterator pos);erase(first,last);clear();
deque交换:d1.swap(d2);
其他:empty();size();max_size();front();back().
STL_deque双端队列的更多相关文章
- lintcode二叉树的锯齿形层次遍历 (双端队列)
题目链接: http://www.lintcode.com/zh-cn/problem/binary-tree-zigzag-level-order-traversal/ 二叉树的锯齿形层次遍历 给出 ...
- lintcode 滑动窗口的最大值(双端队列)
题目链接:http://www.lintcode.com/zh-cn/problem/sliding-window-maximum/# 滑动窗口的最大值 给出一个可能包含重复的整数数组,和一个大小为 ...
- STL---deque(双端队列)
Deque是一种优化了的.对序列两端元素进行添加和删除操作的基本序列容器.它允许较为快速地随机访问,但它不像vector 把所有的对象保存在一块连续的内存块,而是采用多个连续的存储块,并且在一个映射结 ...
- hdu-5929 Basic Data Structure(双端队列+模拟)
题目链接: Basic Data Structure Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 65536/65536 K (Ja ...
- HDU 4286 Data Handler --双端队列
题意:有一串数字,两个指针,然后一些添加,删除,反转,以及移动操作,最后输出序列. 解法:可以splay做,但是其实双端队列更简便. 维护三个双端队列LE,MI,RI分别表示[L,R]序列左边,[L, ...
- 双端队列(单调队列)poj2823 区间最小值(RMQ也可以)
Sliding Window Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 41844 Accepted: 12384 ...
- Java 集合深入理解(10):Deque 双端队列
点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 什么是 Deque Deque 是 Double ended queue (双端队列) 的缩写,读音和 deck 一样,蛋 ...
- BZOJ2457 BeiJing2011 双端队列
[问题描述] Sherry现在碰到了一个棘手的问题,有N个整数需要排序. Sherry手头能用的工具就是若干个双端队列. 她需要依次处理这N个数,对于每个数,Sherry能做以下两件事 ...
- Fork/Join框架之双端队列
简介 ForkJoinPool管理着ForkJoinWorkerThread线程,ForkJoinWorkerThread线程内部有一个双端队列,这个双端队列主要由一个数组queue.数组下标queu ...
随机推荐
- Python关键字yield的解释
yield 是一个类似 return 的关键字,只是这个函数返回的是个生成器. >>> def createGenerator() : ... mylist = range(3) . ...
- iOS 开源库介绍
1. Github-iOS备忘 2. iOS 第三方开源库的吐槽和备忘 3. 移动开发的后台服务支持平台 4. iOS 开源库 之 AFNetWorking 2.x 5. iOS 之 二维码 ZXin ...
- javaEE开发中使用session同步和token机制来防止并发重复提交
javaEE开发中使用session同步和token机制来防止并发重复提交 通常在普通的操作当中,我们不需要处理重复提交的,而且有很多方法来防止重复提交.比如在登陆过程中,通过使用redirect,可 ...
- Spring的IOC原理[通俗解释一下]
Spring的IOC原理[通俗解释一下] 1. IoC理论的背景我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图 ...
- 细说WPF数据绑定
简单的事例: <Slider Name="mySlider" Height="28" HorizontalAlignment="Left&q ...
- js运算符单竖杠“|”的作用
在js整数操作的时候,相当于去除小数点,parseInt.在正数的时候相当于Math.floor(),负数的时候相当于Math.ceil() 注: 1. Math.ceil()用作向上取整. 2. M ...
- Madifest文件详解
介绍 Madifest是个XML的描述文件,对于每个DLL有DLL的Manifest文件,对于每个应用程序Application也有自己的Manifest.对于应用程序而言,Manifest可以是一个 ...
- js立即执行函数: (function ( ){...})( ) 与 (function ( ){...}( ))
( function(){…} )() ( function (){…} () ) 是两种javascript立即执行函数的常见写法,最初我以为是一个括号包裹匿名函数,再在后面加个括号调用函数,最后达 ...
- Syslog4j如何实现接收日志
1.Syslog4j是一个实现Syslog(RFC3164)协议的Java开源类库包括客户端与服务器端.通过 UDP/IP, TCP/IP, TCP/IPover SSL/TLS, Unix Sysl ...
- DllRegisterServer的调用失败的问题解决方法
1'按键盘上的win+x键调出常用命令. 2'选择“命令提示符(管理员)“ 3'在”命令提示符“中输入”regsvr32 c:\Windows\SysWOW64\comdlg32.ocx“或其他ocx ...