vector和list的區別

2021-10-09 04:52:05 字數 808 閱讀 6458

1.vector的底層實現是順序表,在記憶體中是一串連續的空間

2.list的底層實現是帶頭節點的雙向迴圈鍊錶,在記憶體中不是一串連續的空間

1.vector支援隨機訪問,通過下標精準定位到乙個元素,訪問元素的時間複雜度是o(1);

2.list不支援隨機訪問,想要訪問某乙個元素只能遍歷整個鍊錶,訪問元素的時間複雜度為o(n);

1.vector的插入和刪除的效率低,因為在每次的刪除或插入(除了尾插和尾刪)都需要移動元素,時間複雜度為o(n)。由於vector的特性,在插入過程中有可能會牽扯到空間的擴容和資料的搬移,這會導致效率更為低下。

2.list的插入和刪除的效率較高,因為他不需要資料的移動,只需要更改插入或刪除的位置上的前後節點的指向就行。時間複雜度為o(1)。

1.vector的空間利用率高,由於它在記憶體中占用的是一段連續的空間,不容易照成記憶體碎片。

2.list的空間利用率低,由於它在記憶體中占用的不是一段連續的空間,容易照成記憶體碎片

1.vector利用的是原生指標,在vector中,iterator支援 」+「、」+=「,」<"等操作

2.list是對原生指標的封裝。

1.vector在插入元素時的時候,要重新給所有的迭代器賦值,因為插入元素有可能導致擴容,只是原來的迭代器失效,刪除元素時當前迭代器同樣需要重新賦值,否則會失效。

2.list在插入元素的時候不會導致迭代器實現,刪除元素的時候指揮導致當前迭代器失效,其他的迭代器不會受到影響。

1.vector適合需要高效率儲存,需要隨機訪問,並且不管行插入和刪除效率的場景。

2.list適合有大量的插入和刪除操作,並且不關心隨機訪問的場景

list和vector的區別

vector和built in陣列類似,它擁有一段連續的記憶體空間,並且起始位址不變,因此它能夠非常好的支援隨機訪問,即操作符,但由於它的記憶體空間是連續的,所以在中間進行插入和刪除會造成記憶體塊的拷貝。另外,當該陣列後的記憶體空間不夠時,需要重新申請一塊足夠大的記憶體並進行記憶體的拷貝。這些都大大...

vector和list的區別

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

list和vector的區別

vector和動態陣列類似,擁有一段連續的記憶體空間,能高效的進行隨機訪問,時間複雜度為o 1 但在進行插入和刪除操作時,會造成記憶體塊的拷貝,時間複雜度為o n 2.list資料結構 list是由雙向鍊錶實現的,記憶體空間是不連續的。訪問資料時間複雜度為o n 但能高效地進行插入和刪除。已知元素是...