1. 程式人生 > >C++ 淺析 STL 中的 list 容器

C++ 淺析 STL 中的 list 容器

時也 sta 雙向鏈表 class span 所有 rom 實現 -s

list - 擅長插入刪除的鏈表
鏈表對於數組來說就是相反的存在。


數組本身是沒有動態增長能力的(程序中也必須又一次開辟內存來實現),
而鏈表強悍的就是動態增長和刪除的能力
但對於數組強悍的隨機訪問能力來說的話,鏈表卻非常弱。


list - 是一個雙向鏈表的實現。
為了提供雙向遍歷的能力,list要比一般的數據單元多出兩個指向前後的指針。


這也是沒辦法的,畢竟如今的PC內存結構就是一個大數組,鏈表要在不同的環境中實現自己的功能就須要花很多其它空間。


list提供了push_back,push_front,pop_back,pop_front四個方法來方便操作list的兩端數據的添加和刪除,只是少了

vector的at和[]運算符的隨機訪問數據的方法隨機訪問數據的方法

並非不能實現。而是list的設計者並不想讓list去做那些事情。由於他們會做得很差勁。對於list來說。清除容器內全部的元素是一件苦力活,由於全部數據單元的內存都不連續,list僅僅有一個一個遍歷來刪除。


相關博文

詳見:C++ stack queue vector 中 易混淆的經常用法 淺析

詳址:http://blog.csdn.net/u013630349/article/details/46860117


Level 1 - 只作為Map使用:採用靜態數組
Level 2 - 保存定長數據,使用時也是所有遍歷:採用動態數組(長度一開始就固定的話靜態數組也行)
Level 3 - 保存不定長數組。須要動態添加的能力。側重於尋找數據的速度:採用vector
Level 3 - 保存不定長數組,須要動態添加的能力。側重於添加刪除數據的速度:採用list
Level 4 - 對數據有復雜操作。即須要前後增刪數據的能力,又要良好的數據訪問速度:採用deque
Level 5 - 對數據中間的增刪操作比較多:採用list。建議在排序的基礎上,批量進行增刪能夠對執行效率提供最大的保證
Level 6 - 上述中找不到適合的:組合STL容器或者自己建立特殊的數據結構來實現

有黑必有白,世界萬物都是成對出現的。

性能總結與使用建議

技術分享

C++ 淺析 STL 中的 list 容器