一、容器deque结构
是双向开口的空间。
而vector是单向的,已知vector的内存扩充是二倍成长。那么deque怎么扩充呢?
双向扩充!
deque的方式是使用分段,然后将各段串接在一起。
map是个vector,其中每个元素是指针,指向每个分段,以将每个分段串接在一起。因此map是个T**类型
如果队列末尾满了,需要再分配一个buffer,并且在map后面中存入指向他的指针。
deque的迭代器iterator是一个class,内部有四个成员:cur,first,last,node
- node:指向控制中心map,迭代器可以知道控制中心在哪,当迭代器需要++或者–的时候,就能通过它回到控制中心以跳到另一个分段。
- last:某个buffer的尾(标识缓冲区的边界)
- first:某个buffer的头(标识缓冲区的边界)
- cur:迭代器的任务是指向某一个元素,cur是在某个缓冲区中迭代器指向的元素。
只有cur才会变动。
当跳到下一个缓冲区buffer,这四个成员都会发生变动。
- start:begin(),返回这个成员
- finish:end(),返回这个成员
template <class T,class Ref,class Ptr,size_t BufSize