STL序列容器

2021-06-20 12:15:53 字數 1888 閱讀 1411

序列容器

:邏輯上有序

,但是實際上其位址不一定是連續的.

序列容器包括

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...