和vector相比,list的實現更加複雜,因為它並不要求空間是連續儲存的,它的好處是已知位置的元素插入和移除都是常數時間。
1、list的節點
由於list是雙向鍊錶,因此list的節點需要指向前驅節點的指標以及指向後繼節點的指標。
2、list的迭代器
由於空間並不連續,因此list無法支援隨機訪問元素的能力,所以list使用的迭代器是雙邊迭代器,bidirectional iterators。
list有乙個非常重要的特點:那就是插入操作和結合操作並不會造成原有的list的迭代器失效,甚至list的刪除操作也只有指向被刪除元素的迭代器失效,其他迭代器並未失效。
3、list的資料結構
sgi中的list不僅是乙個雙向鍊錶,還是乙個環狀雙向鍊錶。所以它只需要乙個節點,就可以完整表示整個鍊錶。(鍊錶用乙個節點不都可以表示?)因此如果讓這個節點指向刻意至於尾端的乙個空白節點,node便符合「前開後閉」的要求,稱為last迭代器。
4、list常見函式的說明
插入insert:如果標示出插入點的位置,那麼新節點將位於哨兵迭代器所指節點的前方——這是stl對於「插入操作」的標準規範。
刪除erase:刪除操作返回的迭代器位置指向刪除元素位置的下乙個位置。
list內部還提供了乙個所謂的遷移操作(transfer):將某連續範圍元素遷移到某個特定位置之前。這個操作為其他的負責操作如splice,sort,merge等奠定了良好的基礎。但注意這個介面並未公開,list使用的接合操作是splice操作,功能和transfer一樣。
需要注意的是:list不能使用stl演算法sort()函式,只能使用自己的sort()演算法,這是因為stl演算法中的sort()函式只支援隨機儲存迭代器型別。而list是雙邊迭代器。
STL序列式容器之list
一,list容器基本概念 1.list容器基本知識 二,list容器建構函式 1.無參建構函式 無參建構函式 list l1 2.有參建構函式 有參建構函式,10個字元 a 來初始化容器 list l2 10,a 有參建構函式,用上面的容器初始化下面的容器 list l3 l2.begin l2.e...
STL學習筆記 序列式容器list
由於vector的使用,經常會出現迭代器錯誤,主要是因為vector在每次更改完資料就會重新配置,迭代器就會失效,list的結構和vector的設計差異決定了list在這方面具有優越性,list的insert和splice操作不會造成迭代器失效,並且erase也只會是讓當前元素的迭代器失效。list...
STL 序列式容器 list(簡單複習)
stl 常用容器總結,帶有複習性質的學習更有效率 list 和 vector 是最常用的兩個容器,也是在面試中最常被問到的,讓你對比一下這兩個容器 那麼,首先複習一下 list 的結構,list 底層的資料結構是雙向鍊錶,同時,和vector不同的是,list 的迭代器不再是原生指標,而是專門封裝的...