STL deque的實現

參考自 侯捷, 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;  // 指向此迭代器對應的管控中心
};
  • 迭代器結構圖如下:
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章