參考自 侯捷, STL源碼剖析
- class deque definition
deque採用一塊所謂的map作爲主控,這裏的map是一塊連續空間,其中每個元素都是一個指針,指向一段(較大的)連續線性空間,稱爲緩衝區,SGI STL允許我們指定緩衝區大小,默認值0表示將使用512bytes緩衝區。
template<class T, class Alloc=alloc, size_t BufSiz = 0>
class deqeue{
public:
typedef T value_type;
typedef value_type* pointer;
...
protected:
typedef pointer* map_poiner;
map_pointer map; // 指向map,map是塊連續空間,其內額每個元素都是一個指針,指向一塊緩衝區
size_type map_size; // map可容納多少指針
}
- deque結構圖:
- deque的迭代器
deque迭代器要能夠判斷自己是否已經處於其所在緩衝區的邊緣,而且爲了能夠正確跳躍至上一個或下一個緩衝區,deque必須隨時掌握管控中心(map)
template<class T, class Ref, class Ptr, size_t BufSiz>
struct __deque_iterator{
T* cur; // 此迭代器所指的緩衝區的現行(current)元素
T* first; // 此迭代器所指的緩衝區的頭
T* last; // 此迭代器所指的緩衝區的尾(含備用空間)
map_pointer map; // 指向此迭代器對應的管控中心
};
- 迭代器結構圖如下: