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