STL中vector list deque的區別

2021-06-09 00:37:18 字數 1297 閱讀 8313

向量 相當於乙個陣列

在記憶體中分配一塊連續的記憶體空間進行儲存。支援不指定vector大小的儲存。stl內部實現時,首先分配乙個非常大的記憶體空間預備進行儲存,即capacituy()函式返回的大小,當超過此分配的空間時再整體重新放分配一塊記憶體儲存,這給人以vector可以不指定vector即乙個連續記憶體的大小的感覺。通常此預設的記憶體分配能完成大部分情況下的儲存。

優點:

(1) 不指定一塊記憶體大小的陣列的連續儲存,即可以像陣列一樣操作,但可以對此陣列

進行動態操作。通常體現在push_back() pop_back()

(2) 隨機訪問方便,即支援[ ]操作符和vector.at()

(3) 節省空間。

缺點:

(1) 在內部進行插入刪除操作效率低。

(2) 只能在vector的最後進行push和pop,不能在vector的頭進行push和pop。

(3) 當動態新增的資料超過vector預設分配的大小時要進行整體的重新分配、拷貝與釋放

雙向鍊錶

每乙個結點都包括乙個資訊快info、乙個前驅指標pre、乙個後驅指標post。可以不分配必須的記憶體大小方便的進行新增和刪除操作。使用的是非連續的記憶體空間進行儲存。

優點:

(1) 不使用連續記憶體完成動態操作。

(2) 在內部方便的進行插入和刪除操作

(3) 可在兩端進行push、pop

缺點:

(1) 不能進行內部的隨機訪問,即不支援[ ]操作符和vector.at()

(2) 相對於verctor占用記憶體多

雙端佇列 double-end queue

deque是在功能上合併了vector和list。

優點:

(1) 隨機訪問方便,即支援[ ]操作符和vector.at()

(2) 在內部方便的進行插入和刪除操作

(3) 可在兩端進行push、pop

缺點:

(1) 占用記憶體多

使用區別:

1 如果你需要高效的隨即訪問,而不在乎插入和刪除的效率,使用vector

2 如果你需要大量的插入和刪除,而不關心隨即訪問,則應使用list

3 如果你需要隨即訪問,而且關心兩端資料的插入和刪除,則應使用deque

STL中的型別

一 常整數對映為型別 alexandrescu提出的簡單而有用的template template struct int2type enum template class niftycontainer private void dosomething t pobj,int2type t pnewob...

STL中的next permutation函式

在c 的標準函式庫stl中,next permutation 函式用於求數列的全排列。函式原型 template bool next permutation bidirectionaliterator first,bidirectionaliterator last template bool ne...

STL演算法中upper bound

upper bound 在前閉後開區間查詢的關鍵字的上界,返回大於val的第乙個元素位置。首先介紹的是第一種用法 查詢比某個元素大的第乙個的值。如下 vectora vector iterator ite for each a.begin a.end int a cout endl sort a.b...