STL幾種容器的區別簡介

2021-05-24 06:57:27 字數 1167 閱讀 7071

有黑必有白,世界萬物都是成對出現的。

鍊錶對於陣列來說就是相反的存在。

陣列本身是沒有動態增長能力的(程式中也必須重新開闢記憶體來實現),

而鍊錶強悍的就是動態增長和刪除的能力。

但對於陣列強悍的隨機訪問能力來說的話,鍊錶卻很弱。

list是乙個雙向鍊錶的實現。

為了提供雙向遍歷的能力,list要比一般的資料單元多出兩個指向前後的指標。

這也是沒辦法的,畢竟現在的pc記憶體結構就是乙個大陣列,

鍊錶要在不同的環境中實現自己的功能就需要花更多空間。

list提供了push_back,push_front,pop_back,pop_front四個方法

來方便操作list的兩端資料的增加和刪除,不過少了vector的at和運算子的

隨機訪問資料的方法。並不是不能實現,而是list的設計者

並不想讓list去做那些事情,因為他們會做得非常差勁。

對於list來說,清除容器內所有的元素是一件苦力活,

因為所有資料單元的記憶體都不連續,list只有乙個乙個遍歷來刪除。

黑與白,處於這兩個極端之間的就是令人愉悅的彩色了。

deque作為vector和list的結合體,確實有著不凡的實力。

stl的deque的實現沒有怎麼去看過,不過根據我自己的猜測,

應該是把陣列分段化,在分段的陣列上新增指標來把所有段連在一起,

最終成為乙個大的陣列。

deque和list一樣,提供了push_back,push_front,

pop_back,pop_front四個方法。可以想象,如果要對deque的兩端進行操作,

也就是要對第一段和最後一段的定長陣列進行重新分配記憶體區,

由於分過段的陣列很小,重新分配的開銷也就不會很大。

deque也和vector一樣,提供了at和運算子的方法。

要計算出某個資料的位址的話,雖然要比vector麻煩一點,

但效率要比list高多了。

首先和list一樣進行遍歷,每次遍歷的時候累積每段陣列的大小,

當遍歷到某個段,而且basen <= index < basen + basen_length的時候,

通過address = basen + basen_index就能計算出位址

由於分過段的後鍊錶的長度也不是很長,所以遍歷對於

整體效能的影響就微乎其微了。

STL容器簡介

stl的容器可以分為以下幾個大類 一 序列容器,有vector,list,deque,string.二 關聯容器,有set,multiset,map,mulmap,hash set,hash map,hash multiset,hash multimap 三 其他的雜項 stack,queue,va...

STL容器簡介

1 stl簡介 2 stl中的容器及底層實現 3 stl容器的公用函式 stl提供六大元件,彼此可以組合套用 1 容器 容器用來存放資料,從實現的角度看,stl容器是一種類模板,包括vector list deque set map等。2 演算法 stl演算法是一種函式模板,各種常用的演算法如sor...

5 2 STL容器容器的簡介

stl容器的簡介 在資料儲存上,有一種物件型別,它可以持有其他物件或者指向其他物件的指標,這種物件型別叫容器,容器類是一種特定 重用問題的良好解決方案。stl容器的分類 1.順序性容器 vector vertor在底層是以陣列的形式存放,只能從末尾處插入。特點是查詢的快,插入的慢!deque 在底層...