deque是一个双向开口的容器,在头尾两端进行元素的插入跟删除操作都有理想的时间复杂度。

deque使用的是分段连续线性空间,它维护一个指针数组(T** map),其中每个指针指向一块连续线性空间。

(map左右两边一般留有剩余空间,用于前后插入元素,具体下面可以看到其实现)

STL源码剖析(deque)

 

根据上图,可以了解到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 };
View Code

相关文章: