Deque
Deque为双端队列,提供双端进出的操作,特点如下:
- 包含一个map链表,用来将存放元素的多个缓冲区“连接”起来,使用者使用时像是拥有了连续空间。
- 包含start、finish两个迭代器和一个pointer指针
Deque的实现:
Deque的iterator
deque迭代器的设计比较精巧,包含node、first、last、cur四个指针。特定如下:
- 若_Duque_iterator中node指向某个缓冲区,first指向buffer开端,last指向buffer末端,cur指向buffer存元素的位置。
- 对于start迭代器,其cur指向buffer存元素的开头;对于end迭代器,其cur指向buffer存元素的末尾。
- 用于遍历的iterator的cur指向buffer中的当前访问元素,当iterator走到buffer边界时,要有能力跳到下一个buffer,通过map中的node实现。
insert操作
开头插入调用push_front();末尾调用push_back();中间调用insert_aux();
insert操作会计算插入位置position到首尾的距离,在尽量减少元素移动的情况下加入。
deque操作符的重载
- 操作符 [ ]
reference operator[](size_type n){
return start[difference_type(n)];
}