STL源碼剖析之Deque容器【2013.11.25】

歡迎加入我們的QQ羣,無論你是否工作,學生,只要有c / vc / c++ 編程經驗,就來吧!158427611 【IT】C/C++/STL/Linux/W


 STL源碼剖析之Deque容器【2013.11.25】


deque是說起來和上一篇的List有點像,他是一個雙向隊列,但是不循環。

(隊列:在一個順序空間內 實現一種 先進後出 的屬性)



deque的定義:


SGI STL中 deque是一個 僞連續的空間,是由一段一段的連續空間連接的,當保存的數據超出現有空間的時候,就再配置一段空間。

從外部看,deque是一個連續的容器。所以我說是僞連續空間。

因而deque的內部有一個指針空間,用來存儲每一段的指向指針,就是上面的 map 成員變量。(不是map容器噢)

map的每個元素就是指向一段連續空間。

 map_size 大小表示 有多少段空間。

同樣map也是有大小的,map滿了的時候,就重新配置更大 的map並把原map拷貝過去。

插入的時候判斷是否需要配置新空間,由deque的迭代器來判斷。看代碼:


cur last來決定是否需要配置新空間。否則都是用現有空間。

當需要取下一個段空間的時候,就由node返回map,取map的下一個指針,即是指向了下一個邏輯節點。指向上一個也是同理!

同時有定義看出,deque的段空間的大小是固定了的,有成員函數buffer_size 可以知道。




【1】deque是一個雙端隊列,兩端可以入隊出隊的。

【2】由於deque的分段管理,這個可以說 有點 繼承了 vector的線性連續空間的優點,提高定位效率(雖然deque沒有提供這樣的接口方法),也繼承了List的優點,不會過多配置備用空間,造成一些空間浪費(也可以算Vector的缺點)



歡迎加入我們的QQ羣,無論你是否工作,學生,只要有c / vc / c++ 編程經驗,就來吧!158427611 【IT】C/C++/STL/Linux/W

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章