C vector與list之間的區別

2021-10-03 13:23:12 字數 500 閱讀 3188

vector與list都是stl序列式容器,由於底層實現原理不同,所以兩個容器適用場景不同,我們在使用在使用兩個容器時,不由得會將它們進行對比。

vector

list

底層實現

動態順序表,底層空間連續

雙鏈表,底層空間不連續

插入與刪除

插入與刪除效率低,因為需要移動資料元素,時間複雜度為o(n)

插入與刪除效率高,不需要元素移動,時間複雜度o(1)

空間利用率

底層空間連續,空間利用率高

空間不連續,空間利用率低,容易產生空間碎片

訪問操作

支援隨機訪問,支援按下標訪問

不支援隨機訪問,想訪問只能從頭遍歷

迭代器原生態指標

對原生態指標的封裝

使用場景不同

空間小,需要隨機訪問

大量刪除與插入操作,不需要隨機訪問

迭代器失效

擴容導致迭代器失效

刪除導致迭代器失效

C vector和list的區別

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

C vector和list的區別

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

C vector和list的區別

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