deque简介
deque是一个双向开口的容器,可在头尾两端插入和删除元素,deque由动态的连续空间组合而成,因为迭代器的良好设计,提供了随机访问,造成一种deque为连续空间的假象
deque的数据结构
deque有一个二级指针map,map指向一小块空间,其中的每个元素都是指针,指向一段连续线性空间,称为缓冲区,缓冲区为deque存储的主体,其中存放元素
tempalte <class T, class Alloc = alloc>
class deque {
public:
typedef T value_type;
typedef T* pointer;
typedef T** map_pointer;
protected:
iterator start;
iterator finish;
map_pointer map;
size_type size; //map内指针个数
......
}
iterator 结构如下:
template <class T>
class deque_iterator {
public:
typedef T** map_pointer;
T* cur; //指向所指缓冲区当前元素
T* first; //首元素
T* last; //尾元素后一个
map_pointer node; //指向控制中心
}
用图表示如下
deque的主要操作
1.push_front
当start指向的缓冲区无备用空间时,执行push_front_aux
push_front_aux
操作如下:
判断map前端的备用节点是否充足,如果充足,则再分配一个缓冲区,start.node