List是一種序列式容器。List容器完成的功能實際上和數據結構中的雙向鏈表是極其類似的,List中的數據元素是經過鏈表指針串連成邏輯意義上的線性表,也就是List也具備鏈表的主要優勢,即:在鏈表的任一位置進行元素的插入、刪除操做都是快速的。編程
List的實現大概是這樣的,相似雙向鏈表,:list的每一個節點有三個域:前驅元素指針域、數據域和後繼元素指針域。數據結構
前驅元素指針域保存了前驅元素的首地址;數據域則是本節點的數據;後繼元素指針域則保存了後繼元素的首地址。其實,List和循環鏈表也有類似的地方,即:頭節點的前驅元素指針域保存的是鏈表中尾元素的首地址,List的尾節點的後繼元素指針域則保存了頭節點的首地址,這樣,List實際上就構成了一個雙向循環鏈。app
因爲List元素節點並不要求在一段連續的內存中,顯然在List中是不支持快速隨機存取的,所以對於迭代器,只能經過「++」或「--」操做將迭代器移動到後繼/前驅節點元素處。而不能對迭代器進行+n或-n的操做,這點是與vector等不一樣的地方。函數
使用list容器以前必須加上<list>頭文件:#include<list>;spa
List屬於std命名域的內容,所以須要經過命名限定:using std::list;也能夠直接使用全局的命名空間方式:using namespace std。指針
優勢:(1)內存不連續;blog
(2)動態操做,插入與刪除效率高;排序
(3)可在兩端進行pop,push。內存
缺點:(1)不能隨機訪問;rem
(2)相對於vector佔用內存多(須要存儲前驅後繼元素指針域)。
示例:
示例:
示例:
示例:
示例:
示例:
示例:
示例:
示例: