1.总体概览
- 双向开口的连续线性空间
- 头尾均可以常数时间插入和删除
- 空间是动态地以分段连续空间组合而成,随时可以增加一段新的空间并链接起来,不用像vector那样重新分配新空间再拷贝
- deque提供Random Access Iterator 但是其迭代器不是普通指针,复杂度较之于vector会高出很多,所以一般使用vector而不是deque
2.deque的中控器(map)
- 采用一块所谓的
map(并非STL的map容器)
,map是一小块连续空间,每个元素都是指针,指向一段连续空间(缓冲区
) - 缓冲区才是数据存储的主体
- 允许指定缓冲区大小,当默认值0表示缓冲区使用512字节
3.迭代器
- 需要指出分段连续空间在哪,并判断是否处于缓冲器边缘,并能够跳跃到另一个缓冲区
- 迭代器中含有三个
T*
指针,cur,first,last
指的是迭代器所指的缓冲区中的当前元素、头、尾 - 此外还含有一个
map_pointer
类型的指针(可以看为T**),指向map指针数组的一项,代表当前迭代器所属的缓冲区
3.1buffer_size
,主要调用全局函数__deque_buf_size
,获取缓冲区的大小
3.2 set_node
跳跃一个缓冲区
void set_node(map_pointer new_node){
node=new_node;
first=*new_node;
last=first+(difference_type