c 讀書筆記(順序容器)

2022-04-04 07:17:26 字數 2266 閱讀 1957

1、順序容器包括:vector,list,deque

2、接受容器大小做形參的建構函式只適用於順序容器,而關聯容器不支援這種初始化。

3、作為容器元素型別必須滿足以下兩個約束:

一、元素型別必須支援賦值運算。

二、元素型別的物件必須可以複製。

上面的兩條是最低限度的元素型別約束。除了引用型別外,所有內建或復合型別都可用做元素型別。

4、只有vector和deque容器提供以下兩種重要的運算集合:

一、迭代器算術運算:iter+n

iter-n

iter1+=iter2

iter1-=iter2

iter1-iter2

二、除了==和!=之外的關係操作符來比較兩個迭代器:>、>=、

5、關於新增,插入或刪除元素可能會使迭代器失效

關於這個問題首先要弄清楚vector,list,deque在記憶體中是怎樣儲存的:

vector容器的元素以連續的方式存放——每乙個元素都緊挨著前乙個元素儲存。所以當容器中已經沒有空間容納新的元素,vector必須重新分配儲存空間,用來存放原來的元素以及新新增的元素。在vector中某個位置插入乙個元素時,該位置後面的元素都要向後移動了。刪除某個元素道理與插入一樣。

list容器表示不連續的記憶體區域,list儲存類似於鍊錶,故插入或刪除list容器中的乙個元素不需要移動任何其他元素。

下面我給出兩端**來證明vector和list的儲存方式:

#include

#include

#include

using namespace std;

int main()

vectorvec;

vec.push_back(3);

vector::iterator ite=vec.begin();

cout<

vec.push_back(3);

cout<

li.push_back(3);

list::iterator it=li.begin();

cout<

li.push_back(3);

cout<

getchar();

}執行結果是:

有執行結果可以看出vec起初的起始位址是0x310f18,通過插入10000元素後,起始位址變成了0x320020,說明vector起始的容量已經不能滿足再新增10000的要求了,故必須重新開闢一塊記憶體空間來存放元素。同時該程式也說明:vector容器新增元素會使迭代器失效。因為迭代器也是指標,當vector開闢新記憶體空間來存放更多的元素時候,原來的記憶體空間就要被收回了,這時候指向以前記憶體空間的迭代器就成了「野迭代器」了!而list容器迭代器經過增加元素後並沒有失效,這也從側面說明list容器在新增元素(不論新增多少個元素)都不需要移動任何其他元素。

6、容器之間的比較是基於容器內元素的比較。它的比較方法類似於string型別的比較。

7、front和back   pk    begin和end

front將返回容器內第乙個元素的引用,返回型別是size_type;back將返回容器最後乙個元素的引用,返回型別也是size_type

begin將返回指向容器內第一元素的迭代器,返回型別是iterator;end將返回容器最後乙個元素的下乙個位置的迭代器,返回型別是iterator

8、順序容器中能夠使用下表操作的有vector和deque,但是要注意:容器的下表只能用於獲取已存在的元素,不能用來新增元素。這兩天老是犯這個錯誤,可能陣列毒害太大了!

9、賦值pk swap

賦值操作符首先刪除其左運算元容器中的所有元素,然後將右運算元容器的所有元素插入到左邊容器中:

c1=c2等價於c1.erase(c1.begin(),c2.end());c1.insert(c1.begin(),c2.begin(),c2.end());

c1.swap(c2)作用是交換內容:呼叫完該函式後,c1中存放的是c2原來的元素,c2中存放的則是c1原來的元素。

c++primer上有這樣一段話:該操作不會刪除或插入任何元素,而且保證在常量時間內實現交換。由於容器內沒有移動任何元素,因此迭代器不會失效。讀完就會想:為什麼呢?為什麼沒有元素移動?為什麼迭代器不會失效?我當時猜想應該是:該操作只是把分給兩個容器的記憶體的位址進行交換,來實現內容交換!下面我寫了**驗證這一想法

執行結果是:

讀書筆記(C ) 順序容器

9.1 順序容器的定義 表 9 1 順序容器 vector 支援快速隨機訪問 list 支援快速插入 刪除 deque 雙端佇列 順序容器介面卡 stack lifo queue lifo priority queue 有優先順序管理的佇列 9.1.1 容器元素的初始化 表 9 2 容器建構函式 c...

C 讀書筆記 順序容器

1 順序容器包括 vector,list,deque 2 接受容器大小做形參的建構函式只適用於順序容器,而關聯容器不支援這種初始化。3 作為容器元素型別必須滿足以下兩個約束 一 元素型別必須支援賦值運算。二 元素型別的物件必須可以複製。上面的兩條是最低限度的元素型別約束。除了引用型別外,所有內建或復...

《C Primer》讀書筆記 第9章 順序容器

順序容器型別 vector 可變大小陣列 deque 雙端佇列 list 雙向列表 forward list 單向列表 c 11新增 array 固定大小陣列 c 11新增 string 與vector相似的容器,但專門用於儲存字元 順序容器選取原則 通常選用vector是最好的選擇,除非你有很好的...