STL讀書筆記

2022-02-07 01:33:06 字數 1386 閱讀 4973

vector - 會自動增長的陣列

list - 擅長插入刪除的鍊錶

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

deque - 擁有vector和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就能計算出位址

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

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

看起來deque很無敵吧,不過deque和希臘神話的阿吉里斯一樣,

再怎麼強大也是有自己的弱點的,之後的測試資料中就能看到了。

STL讀書筆記 迭代器概念

一。概念 1 迭代器在設計模式中成為iterator模式,其定義為 提供一種方法,使他能夠按順序遍歷某個聚合體 容器 所包含的所有元素,但又不需要暴露該容器的內部表現方式。2 迭代器是一種類似指標的物件,他的工作也主要是內容提取 dereference 和成員的訪問 member access 因此...

STL原始碼剖析讀書筆記

一.stl提供六大元件,彼此可以組合套用。1.容器 containers 各種儲存結構,如vector list deque set map,用來存放資料。2.演算法 algorithme 各種常用演算法,如sort search copy erase等。3.迭代器 iterators 扮演容器與演...

STL讀書筆記 迭代器概念

一。概念 1 迭代器在設計模式中成為iterator模式,其定義為 提供一種方法,使他能夠按順序遍歷某個聚合體 容器 所包含的所有元素,但又不需要暴露該容器的內部表現方式。2 迭代器是一種類似指標的物件,他的工作也主要是內容提取 dereference 和成員的訪問 member access 因此...