序列容器
:邏輯上有序
,但是實際上其位址不一定是連續的.
序列容器包括
vector,list,deque,queue,priority_queue,stack.
我們下面對每乙個容器進行分析.
vector容器
大家對vector
一定非常熟悉了
.當記憶體不足時候,會對
vector
進行擴容
,擴容的方式是先申請乙個更大的空間
,然後把原來的資料複製到新的空間上
,釋放原先的空間.
的思想就是這麼簡單.
但是這回造成什麼呢
?迭代器失效
:在刪除乙個元素後
,begin
不會失效
,刪除元素的迭代器和
end迭代器都會失效.
list容器:
乙個雙向迴圈鍊錶.
這裡可以清楚的看出
,list
是乙個雙向鍊錶
.他的查詢效果比單向鍊錶更好
.這裡要特別講一下
node節點,
他是用於標記尾節點的指標.
deque容器
這個圖看起來很亂
,其實一點也不複雜.
map:用於管理儲存區
,每當記憶體不夠的時候
,就向前擴充乙個空間
,或者向後擴充,當
map用完以後
,會再次申請把乙個大記憶體,複製
map中的資料
,然後銷毀舊的
map.
資料儲存區域並不動.
start,finish:
這裡面還有兩個迭代器,是
deque
中的資料
,他們分別指向
deque
首部和尾部.
deque中迭代器失效:
收尾新增資料僅能是當前迭代器
(自己定義的迭代器)失效
,需要重新複製
,deque
是不應該向中間新增資料的
,如果強制向中間部分新增資料會造成所有迭代器同時失效
.deque
是可以儲存引用值的
,因為資料儲存區不會進行拷貝.
map,
他並不是容器,他是
pritority_queue
的底層實現
.和上面那個圖中的那個
map毫不相關.
pritority_queue
底層實現是使用
map,
即乙個用
vector
實現的完全二叉堆.
每當新插入乙個資料就會在後面新增乙個資料
,然後保持堆的性質
,返回優先順序最高的資料
.該型別預設是比較
一般使用該資料都要過載乙個
<
操作符.
他並沒有實現迭代器
,所以不存在迭代器失效問題
.
STL序列容器 vector
二 vector vector容器是包含 t 型別元素的序列容器,和 array容器相似,不同的是 vector容器的大小可以自動增長,從而可以包含任意數量的元素 因此型別引數 t 不再需要模板引數 n。只要元素個數超出 vector 當前容量,就會自動分配更多的空間。只能在容器尾部高效地刪除或新增...
STL 序列式容器細節
stl 序列式容器細節 一 概論 1 序列式容器 array build in c 內建 vector heap內含乙個vector priority queue內含乙個heap list slist deque stack內含乙個deque queue內含乙個deque 2 關聯式容器 rb tr...
stl之序列容器 deque
相比於vector,deque是一種雙向開口的連續線性空間,可以在頭尾兩端分別做元素的插入和刪除操作。這也決定了其更賦值的容器結構。deque內部維護了start和finish 節點,用於雙端的插入和刪除 map,一塊連續空間,其每個元素都是個指標,指向乙個節點。其指向的節點中有四個元素 cur f...