C vector和list的區別

2021-09-11 07:34:21 字數 986 閱讀 7076

1.vector資料結構

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

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

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

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

2.list資料結構

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

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

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

3.vector和list的區別

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

#include#include#includeusing namespace std;

int main()

cout<<"v[2]="<::iterator itv=v.begin();

list::iterator itl=l.begin();

itv = itv+2;

//itl=itl+2; //編譯錯誤,list::iterator沒有過載+

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

itl++;

cout<<*itv因此vector::iterator支援「+」,「+=」,「<」等操作符。

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

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

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

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

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

**:

C vector和list的區別

1.vector資料結構 vector和陣列類似,擁有一段連續的記憶體空間,並且起始位址不變。因此能高效的進行隨機訪問,時間複雜度為o 1 但因為記憶體空間是連續的,所以在進行插入和刪除操作時,會造成記憶體塊的拷貝,時間複雜度為o n 另外,當陣列中記憶體空間不夠時,會重新申請一塊記憶體空間並進行記...

C vector和list的區別

1.vector資料結構 vector和陣列類似,擁有一段連續的記憶體空間,並且起始位址不變。因此能高效的進行隨機訪問,時間複雜度為o 1 但因為記憶體空間是連續的,所以在進行插入和刪除操作時,會造成記憶體塊的拷貝,時間複雜度為o n 另外,當陣列中記憶體空間不夠時,會重新申請一塊記憶體空間並進行記...

C vector和list的區別

vector與陣列類似,擁有一段連續的記憶體空間,並且起始位址不變。便於隨機訪問,時間複雜度為o 1 但因為記憶體空間是連續的,所以在進入插入和刪除操作時,會造成記憶體塊的拷貝,時間複雜度為o n 此外,當陣列記憶體空間不足,會採取擴容,通過重新申請一塊更大的記憶體空間進行記憶體拷貝。list底層是...