deque是一个双向开口的容器,在头尾两端进行元素的插入跟删除操作都有理想的时间复杂度。
deque使用的是分段连续线性空间,它维护一个指针数组(T** map),其中每个指针指向一块连续线性空间。
(map左右两边一般留有剩余空间,用于前后插入元素,具体下面可以看到其实现)
根据上图,可以了解到deque的迭代器的基本定义。
1 template <class T, class Ref, class Ptr, size_t BufSiz> 2 struct __deque_iterator { 3 // 基本型别的定义 4 typedef __deque_iterator<T, T&, T*, BufSiz> iterator; 5 typedef random_access_iterator_tag iterator_category; 6 typedef T value_type; 7 typedef Ptr pointer; 8 typedef Ref reference; 9 typedef size_t size_type; 10 typedef ptrdiff_t difference_type; 11 typedef T** map_pointer; 12 typedef __deque_iterator self; 13 14 // 缓冲区的大小 15 tatic size_t buffer_size() { ... } 16 17 // 主要维护的三个指针 18 T* cur; // 指向当前元素 19 T* first; // 指向当前缓冲区的头 20 T* last; // 指向当前缓冲区的尾 21 22 map_pointer node; // 指向当前缓冲区在map中的位置 23 // ... 24 };