C++】vector與list的區別

主要不同如下:

不同之處 vector list
底層結構 動態順序表,一段連續空間 帶頭結點的雙向循環鏈表
隨機訪問 支持隨機訪問,訪問某個元素效率O(1) 不支持隨機訪問,訪問某個元素效率O(N)
插入和刪除 任意位置插入和刪除效率低,需要搬移元素,時間複雜度爲O(N),插入時可能需要增容,ps:增容:開闢新空間,拷貝元素,釋放舊空間,導致效率更低 任意位置插入和刪除效率低,不需要搬移元素,時間複雜度爲O(1)
空間利用率 底層是連續空間,不容易造成內存碎片,空間利用率高,緩存利用率高 底層節點動態開闢,小節點容易造成內存碎片,空間利用率低,緩存利用率低
迭代器 原生態指針 對原生態指針(節點指針)進行封裝
迭代器失效 在插入元素時,要給所有的迭代器重新賦值,因爲插入元素有可能會導致重新擴容,致使原來迭代器失效,刪除時,當前迭代器需要重新賦值否則會失效 插入元素不會導致迭代器失效,刪除元素時,只會導致當前迭代器失效,其他迭代器不受影響
使用場景 需要高效存儲,支持隨機訪問,不關係插入刪除效率 大量插入和刪除操作,不關心隨機訪問
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章