list和vector的區別

2021-08-29 18:13:27 字數 733 閱讀 8174

vector和動態陣列類似,擁有一段連續的記憶體空間,能高效的進行隨機訪問,時間複雜度為o(1);但在進行插入和刪除操作時,會造成記憶體塊的拷貝,時間複雜度為o(n)。

2.list資料結構

list是由雙向鍊錶實現的,記憶體空間是不連續的。訪問資料時間複雜度為o(n);但能高效地進行插入和刪除。

已知元素是連續儲存的,當我們在容器內新增乙個元素時,想想會發生什麼事情:

vector: 如果容器中已經沒有空間容納新的元素,此時,由於元素必須連續儲存以便索引訪問,所以不能在記憶體中隨便找個地方儲存這個新元素。於是,vector 必須重新分配儲存空間,用來存放原來的元素以及新新增的元素:存放在舊儲存空間中的元素被複製到新儲存空間裡,接著插入新元素,最後撤銷舊的儲存空間。

在 list 容器中新增乙個元素,標準庫只需建立乙個新元素,然後將該新元素連線在已存在的鍊錶中,不需要重新分配儲存空間,也不必複製任何已存在的元素。

vector所分配的額外記憶體容量的確切數目因庫的實現不同而不同。事實上,其效能非常好,因此在實際應用中,比起 list 和deque 容器,vector 的增長效率通常會更高。

如果程式既需要隨機訪問又必須在容器的中間位置插入或刪除元素,那應該怎麼辦呢?

此時,選擇何種容器取決於下面兩種操作付出的相對代價:隨機訪問 list 容器元素的代價,以及在 vector 或 deque 容器中插入/刪除元素時複製元素的代價。通常來說,應用中佔優勢的操作(程式中更多使用的是訪問操作還是插入/刪除操作)將決定應該什麼型別的容器。

list和vector的區別

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

vector和list的區別

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

vector和list的區別

1.vector的底層實現是順序表,在記憶體中是一串連續的空間 2.list的底層實現是帶頭節點的雙向迴圈鍊錶,在記憶體中不是一串連續的空間 1.vector支援隨機訪問,通過下標精準定位到乙個元素,訪問元素的時間複雜度是o 1 2.list不支援隨機訪問,想要訪問某乙個元素只能遍歷整個鍊錶,訪問元...