歡迎加入我們的QQ羣,無論你是否工作,學生,只要有c / vc / c++ 編程經驗,就來吧!158427611
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的缺點)