C 中vector和list的區別

2021-08-08 17:07:41 字數 1350 閱讀 3939

1.vector資料結構

vector和陣列類似,擁有一段連續的記憶體空間,並且起始位址不變。

因此能高效的進行隨機訪問,時間複雜度為o(1);

但因為記憶體空間是連續的,所以在進行插入和刪除操作時,會造成記憶體塊的拷貝,時間複雜度為o(n)。

另外,當陣列中記憶體空間不夠時,會重新申請一塊記憶體空間並進行記憶體拷貝。

2.list資料結構

list是由雙向鍊錶實現的,因此記憶體空間是不連續的。

只能通過指標訪問資料,所以list的隨機訪問非常沒有效率,時間複雜度為o(n);

但由於鍊錶的特點,能高效地進行插入和刪除。

3.vector和list的區別

vector擁有一段連續的記憶體空間,能很好的支援隨機訪問,

因此vector::iterator支援「+」,「+=」,「

list的記憶體空間可以是不連續,它不支援隨機訪問,

因此list::iterator則不支援「+」、「+=」、「

vector::iterator和list::iterator都過載了「++」運算子。

我們看乙個簡單的vector和list使用示例:

#include#include

#include

using

namespace

std;

intmain()

cout

<

v[2]=

"<2]<

//cout<

編譯錯誤,list沒有過載

cout<

//cout<

cout<

//cout<

編譯錯誤,list::iterator沒有過載+

vector::iterator itv=v.begin();

list

::iterator itl=l.begin();

itv = itv+2

;

//itl=itl+2;

//編譯錯誤,list::iterator沒有過載+

itl++; //

list::iterator中過載了++,只能使用++進行迭代訪問。

itl++;

cout

<

cout

<

getchar();

return0;

}

總之,如果需要高效的隨機訪問,而不在乎插入和刪除的效率,使用vector;

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

C 容器中列表list和向量vector區別

關於容器 容器是可以用於存放各種型別的資料的資料結構 如 vectorv1 c 標準模板庫 stl 提供三類容器 1 順序容器,如vector,list,deque 雙端佇列 等 2 關聯容器,如set 集合 multiset 多重集合 map 對映 multimap 多重對映 等 3 容器介面卡,...

C 中vector和list排序

容器 泛型演算法 和類是不是就是c 相對於c 的那部分呢?暫時先這麼認為吧。如果這篇部落格有幸被別人看到,請幫忙指出。c 菜鳥 留。vector的迭代器是隨機訪問迭代器,支援泛型演算法的sort及其演算法。vector排序 include include include include includ...

C 中vector和list區別

記憶體空間 vector和陣列類似,記憶體空間是連續的,並且其實位址不變 list是由雙向鍊錶實現的,記憶體空間是不連續的。訪問 vector能夠進行高效的隨機訪問操作,時間複雜度為o 1 list是通過指標訪問資料,不能進行隨機訪問,時間複雜度是o n 插入 刪除 vector因位址時連續的,進行...