vector、list、deque的優缺點區別

vector

優點:

  • 支持下標的隨機訪問,間接的就很好的支持了排序、查找、堆等等算法

缺點:

  • 頭部和中間的插入刪除效率低。時間複雜度 O(N),因爲需要搬移數據實現
  • 插入數據空間不夠需要增容,增容需要開闢新空間、拷貝數據、釋放舊空間,付出的代價很大

詳細介紹:STL容器:vector的簡介與使用

list

優點:

  • 頭插、中間插入不需要搬移數據,效率高,時間複雜度O(1)
  • 插入數據是新增節點,不需要擴容

缺點:

  • 不支持隨機訪問

詳細介紹:STL容器:list的簡介與使用

vector與list的區別

實際運用中vector和list是兩個相輔相成的容器

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

deque

deque結合了vector和list的優點->集大成者
支持隨機訪問,也支持頭插頭刪。但是隨機訪問的效率並不是很高,C++爲了追求效率更喜歡用vector。
目前能看到的應用就是STL用它作爲stack和queue的底層數據結構。

詳細介紹:STL容器:deque的簡介與使用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章