- deque特点:① 分段连续 ② 双向均可增删
- deque的结构:一个中控器vector,是一个指针数组,每个指针指向一块buffer,从中间往两边用,用于实现双端增删的效果;
- deque有四个数据成员:
①两个迭代器(即begin和end返回的迭代器,分别指向首元素和尾后位置)
②一个指向中控器的指针map(用vector实现的)
中控器的大小:最少8块buffer,且从中往两边用
中控器的扩容:跟vector一样,2倍扩容; 且根据左侧满还是右侧满,说明对应方向的插入需求更大,则扩容之后对应这边会多留出一些位置,若左右两侧差不多都用完了,说明左右的插入需求也差不多,因此扩容之后也会在两侧留出等大的buffer
buffer的元素个数:若存的元素类型>=512字节<就只存一个; 否则,存512/元素类型大小 个元素;
③一个表示中控器大小map_size
- 迭代器:含有四个数据成员:cur指针表示当前元素位置,first和last表示当前元素所属的buffer的边界位置,node用于指回该buffer在中控器的位置(用于对外界维护deque是连续的假象)
deque实际上是分段连续的(虽然分段,但模拟出连续的假象),但deque迭代器为了提供随机访问迭代器的功能,需要重载deque迭代器的++,--,+,+=,-,-=,[],*,->等;当需要进行跨越不同buffer时,需要node返回中控器并找到目标buffer;
- 容器可支持哪些功能,一般都是通过重载容器迭代器的某些运算符实现的;