有黑必有白,世界萬物都是成對出現的。
鍊錶對於陣列來說就是相反的存在。
陣列本身是沒有動態增長能力的(程式中也必須重新開闢記憶體來實現),
而鍊錶強悍的就是動態增長和刪除的能力。
但對於陣列強悍的隨機訪問能力來說的話,鍊錶卻很弱。
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 在底層...