生活随笔
收集整理的這篇文章主要介紹了
vector和list容器有哪些区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這個問題的本質還是在問順序表和鏈表的區別
底層結構不同
vector容器list容器
| 一段連續的空間 | 帶頭結點的雙向循環鏈表 |
元素訪問方式
vector容器list容器
| 支持隨機訪問—O(1) | 不支持隨機訪問—O(N) |
| 需要擴容 | 不需要擴容 |
| 任意位置插入元素----O(N)–搬移元素 | O(1) |
迭代器不同
vector容器list容器
| 類型:原生態的指針 | 對原生態指針進行封裝 |
| 失效的場景:導致底層空間改變操作 | 當前迭代器對應的結點沒有了 |
| erase(it) | erase(it) |
空間
vector容器list容器
| 需要擴容 | 不需要擴容 |
| 不擴容的話空間利用率高,擴容不一定 | 不擴容的話空間利用率低,擴容不一定 |
| vector如果不new是在棧上的 | list結點是new出來的,頻繁向系統申請小的內存塊,可能會存在內存碎片。new的底層是malloc,可能會有額外空間的浪費 |
緩存利用率
vector容器list容器
| 比如上面的圖,cpu加載1時有可能把12345全部加載到緩存中,這樣效率更高,底層連續 | 而list加載時,一次性加載可能就一兩個元素,底層不連續 |
應用場景
vector容器list容器
| 高效存儲—訪問 | 任意位置插入和刪除操作比較多 |
接口不同
vector沒有push_front,和pop_front,因為它頭插和頭刪的效率比較低
總結
以上是生活随笔為你收集整理的vector和list容器有哪些区别的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。