C Primer筆記 9 順序容器 2

2021-05-08 09:41:10 字數 2218 閱讀 6213

vector容器的自增長

vector容器的元素以連續的方式存放,即每乙個元素都緊挨著前乙個元素儲存。分配記憶體時實際分配的容量比當前需要的空間多一些,預留的儲存區用於存放新新增的元素,不必為每個新元素重新分配容器。

list容器增加新元素時標準庫只需建立乙個新元素,然後將新元素連線在已存在的鍊錶中,不需要重新分配儲存空間,也不必複製任何已存在的元素。

標準庫的實現者使用這樣的記憶體分配策略:以最小的代價連續儲存元素,由此帶來的訪問元素的便利彌補了其儲存代價,因此在實際應用中,比list 和 deque 容器,vector的增長效率通常會更高。

size(長度):指容器當前擁有的元素個數;

capacity(容量): 則指容器在必須分配新儲存空間之前可以儲存的元素總數。

vectorivec;

cout << "ivec:size:" << ivec.size()

<< " capacity: " << ivec.capacity() << endl;

for(vector::size_type ix = 0; ix != 24; ++ix)

ivec.push_back(ix);

cout << "ive:size: " << ivec.size()

<< " capacity: " << ivec.capacity() << endl;

ivec.reserve(50);

cout << "ive:size: " << ivec.size()

<< " capacity: " << ivec.capacity() << endl;

while(ivec.size() != ivec.capacity())

ivec.push_back(0);

cout << "ive:size: " << ivec.size()

<< " capacity: " << ivec.capacity() << endl;

ivec.push_back(42);

cout << "ive:size: " << ivec.size()

<< " capacity: " << ivec.capacity() << endl;

while(ivec.size() != ivec.capacity())

ivec.push_back(1);

cout << "ive:size: " << ivec.size()

<< " capacity: " << ivec.capacity() << endl;

ivec.push_back(11);

cout << "ive:size: " << ivec.size()

<< " capacity: " << ivec.capacity() << endl;

容器的選用

vector 和 deque 容器提供了對元素的快速隨機訪問,付出的代價是在容器的任意位置插入或刪除元素比在容器尾部插入和刪除的開銷更大。

vector 除了容器尾部外,任何其位置上的insert或erase都要移動被insert和erase元素右邊所有的元素。

list  容器表示不連續的儲存區域,允許向前和向後逐個遍歷元素,在任何位置都能快速insert和 erase(刪除),不需要移動其它元素,付出的代價是元素的隨機訪問開銷較大(訪問某個元素要求遍歷所涉及的其他元素)。

deque容器從佇列的兩端insert和erase元素都非常快,在中間insert和erase付出更高的代價,dque提供了list 和 vector的一些性質:

選擇容器的提示

(1)要求隨機訪問元素,使用vector或deque。

(2)在容器中間insert或erase,使用list。

(3)不是在中間,而是在首部或尾操作,使用deque。

(4)如果只需在讀取輸入時在容器的中間位置插入元素,然後需要隨機訪問元素,可在輸入時將元素讀入list,接著對此容器重新排序,使其適合順序訪問,然後將排序後的list 複製到乙個vector容器。

(5)如果既需要隨機訪問又必須在容器的中間位置insert和erase,應用點點優勢的操作將決定選擇什麼型別的容器。

如果無法確定某種應用該採用哪種容器,則編寫**時嘗試只使用vector和list容器都提供的操作:使用迭代器,而不是下標,並且避免隨機訪問元素。在必要時,可很方便地將程式從使用vector修改為使用list。

C Primer 筆記 順序容器

將單一元素型別聚集起來成為容器,然後根據位置來儲存和訪問這些元素 vectorivec listslist dequedstr vector 支援快速隨機訪問 list 支援快速插入 刪除 deque 雙端佇列 stack 後進先出 lifo 棧 queue 先進先出 fifo 佇列 priorit...

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

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

《C primer》 順序容器

順序容器 vector 支援快速隨機訪問 list 支援快速插入 刪除 deque 雙端佇列 順序容器介面卡 stack 後進先出 lifo 棧 queue 先進先出 fifo 棧 priority queue 有優先順序管理的佇列 容器元素型別必須滿足條件 1.支援賦值運算,2.物件可以賦值 因為...