deque
3.1定义
std::deque
(双端队列)是C++标准模板库(STL)中的一种容器,表示双端队列数据结构。它提供了在两端高效地进行插入和删除操作的能力。与vector的连续线性空间类似,但有所不同,deque动态地以分段连续空间组合而成的,随时可以增加一段新的空间并链接起来。因此deque的迭代器并不是普通的指针;
之前提到vector的动态内存增长需要涉及到更大内存的分配;内存数据的复制;原内存空间的释放。deque避开了vector中的反复内存搬移,但是数据结构的设计和迭代器架构却异常复杂。deque的代码实现量远比vector和list多得多。
3.2deque中控器
deque微观上看起来是连续空间,但宏观上看,deque内部并没有完全在一块连续空间,而是由一段一段的连续空间构成。而这一段一段的连续空间的管理就需要一个中控器。deque采用一块连续的“map”映射区(并不是STL中的map)来管理这些空间。其中每个元素(即一个节点)都是指针,指向一块较大的连续的线性空间,这一块较大的连续线性空间才是deque储存空间的主体。
map其实是一个二级指针,T**,它是一个指针,所指之物又是一个指针,指向一块型别为T的空间。
3.3迭代器
deque迭代器属于最高级的随机访问迭代器,但是相对于vector的普通指针迭代器,deque的迭代器实现相当复杂。
deque迭代器结构:
struct _deque_iterator
{
typedef __deque_iterator<T,T&,T*,BufSize> iterator;
static size_t buffer_size(){
return __deque_buf_size(BufSize,sizeof(T));}
//保持与容器的联结
//此迭代器所指缓冲区中的当前行(current)元素
T* cur;
//缓冲区的头部元素
T* first;
//缓冲区的尾部元素
T* last;
//缓冲区管理中心
map_pointer node;
};