中華南大街網站建設佛山百度網站排名優(yōu)化
相信大家已經學過list與vector,關于它們的不同,我做了一些總結,如下表:
? ? ? ? ? ? ? ? ? ? ?vector | ? ? ? ? ? ? ? ? ? ? ? ? list | |
底層結構 | 動態(tài)順序表,一段連續(xù)的空間 | 帶頭結點的雙向鏈表 |
隨機訪問 | 支持隨機訪問,訪問某個元素的效率O(1) | 不支持隨機訪問,訪問某個元素效率為O(n) |
插入和刪除 | 隨意位置插入和刪除的效率低,需要搬移元素,時間復雜度為O(N),插入時可能需要增容,就是開辟新的空間,拷貝元素,釋放舊空間,導致效率更低 | 任意位置插入和刪除效率高,不需要搬移元素,時間復雜度為O(1) |
空間利用率 | 底層為連續(xù)空間,不容易造成內存碎片,空間利用率高,緩存利用率高 | 底層結點動態(tài)開辟,小結點容易造成內存碎片,空間利用率低,緩存利用率低 |
迭代器 | 原生態(tài)指針 | 對原生態(tài)指針(結點指針)進行封裝 |
迭代器失效 | 在插入元素時,要給所有迭代器重新賦值,因為插入元素有可能會導致重新擴容,致使原來的迭代器失效,刪除時,當前迭代器需要重新賦值,否則會失效 | 插入元素不會導致迭代器時效,刪除元素時,只會導致當前迭代器失效,其他迭代器不受影響 |
使用場景 | 需要高效存儲,支持隨機訪問,不關心插入刪除效率 | 大量插入和刪除操作,不關心隨機訪問 |