前面我们学习过序列容器vector,vector是占用一段连续内存空间,并且是单向开口的,只能在尾部进行压入或者弹出元素(其实从技术上讲,vector也可以实现在头部实现插入和删除操作,但是效率非常低,因此SGI的STL并不支持在头部操作元素)。现在我们要学习的双端队列也是占用一段连续内存空间(实际上是逻辑连续,实际内存不一定连续),但是是双向开口的。
1、deque和vector的最大差异
(1)deque可以在常数时间内对头部进行元素的插入和删除操作。
(2)deque没有所谓的容量概念,因为它是动态地以分段连续空间组成的,随时可以增加一段新的空间并链接起来。
2、deque的原理
deque是由一段段定量连续空间构成(我们称之为map,注意和stl中的关联容器map是两个不同的概念,这里的map其实就是一个vector数据结构),一旦有必要在deque的前端或者尾端增加新空间,便配置一段定量连续空间,串联在整个deque的头端或者尾端,deque的最大任务,就是在这些分段的定量连续空间上,维护其整体连续的假象,并提供随机存取的接口