何为deque?

deque是双向开口的连续线性空间(动态将多个连续空间通过指针数组接合在一起),随时可以增加一段新的空间,所以数据向vector里面的分配,复制,释放操作不

会发生。deque头尾两端分别做插入和删除操作都是常数时间。能用vector尽量使用vector,通过deque用来做队列即可,十分方便的。

不浮躁,慢慢看,就会理解其中的奥妙。

花了半天的时间仔细看了一遍SGI-STLdeque的实现,需要理解其原理,最重要的就是理解其内存模型是咋样的。一切东西,只要理解了内存模型,那么代码看起来都

是那么那么的清晰,明了,感叹大神对内存如神的管理。在理解代码之前,必须理解指针加上数字代表啥意思,例如int *a[10];这是一个指针数组,a的类型是int **,

那么a+3表示指向第三个元素,对应地址的数值实际上等于(long)a + sizeof(int *)。这点理解了,那么很多东西都可以理解很通透了。。。。因为毕竟数据结构就是探

讨如何在内存上面合理的组织数据。

deque内存模型

上述Demo中deque<int , alloc , 4> ideq(20,9);之后,ideq的内存模型如下图,依据下图我们分析内存空间是如何构造以及迭代器是如何工作的。

STL之deque详解_STL

首先可以明白deque模板中肯定需要map,start,finish三个数据用来管理整个内存空间。其一,map是指针数组,里面成员是分配空间Node的地址,如何明白如何动

态分配二维数组,那么这个map就很容易理解;其二,迭代器,迭代器里面含有4个成员,连续空间开始地址(first),结束地址(last),空间中当前元素的地址

(cur)以及连续空间地址在map中的位置(node),上图可以看很清楚。

也就是deque是由许多连续的存储空间组成,不像vector那样,是一整块连续的存储空间。它是在一个映射结构中保存对这些块顺序的跟踪;