结构
STL中使用分段数组串接起来一个双向队列。我们使用buffer来描述这些分段数组。
deque使用一个map数组来管理这些buffer,里面存放指向这些buffer头的指针,如果deque需要向前或者扩充,就在map数组中填充指针。图中的start和finish迭代器用来管理deque的扩充。
总的来说,deque的存储模式是分段连续的。deque的控制中心行为模式类似vector,开始的时候在中心分配buffer指针,如果空间不足,就两倍增长。
迭代器
deque的迭代器主要包含四个数据。
- cur:指向当前迭代器迭代的元素位置。
- first:指向当前buffer首地址。
- last:指向当前buffer末地址的下一个位置(主要遵循iterator的前闭后开原则)。
- node:指向当前buffer在map数组中的位置。
如何保持buffer在使用中的连续性?通过操作符重载和其他操作,调度指针。
G4.9版本
和其他容器一样,为了遵循面向对象,定义和实现分离的原则,重构了数据结构,但是基本原理没有变。