29 STL(七)list容器

基本概念

list也叫鏈表,是連式存儲,和之前的容器比空間上非連續(xù)

1

如上,和數(shù)組連續(xù)空間不一樣,列表存儲空間額外預(yù)留了存儲下一個元素的地址指針,尾部的下個節(jié)點為空所以用NULL。鏈表的特點是插入刪除快,直接將新節(jié)點的地址和插入前的地址進(jìn)行修改即可,而遍歷則不如數(shù)組,鏈表的內(nèi)容分為數(shù)據(jù)域和指針域

2

如上,除了單向鏈表,還有雙向鏈表,存儲的指針域多了前一個節(jié)點的地址。這樣知道了一個節(jié)點不會只知道下一個節(jié)點位置,也能知道前一個節(jié)點的位置,當(dāng)然可以看到頭插頭刪和尾插尾刪,以及insert指定位置刪除,front,back獲得首尾的數(shù)據(jù),begin,end用于迭代器遍歷

優(yōu)點,采用動態(tài)分配內(nèi)存,不會浪費內(nèi)存,同時因為vector插入刪除可能要復(fù)制自身,首尾地址會變化,而鏈表除了操作首尾元素,否則不會改變

構(gòu)造方法

3

如上,可以看到構(gòu)造方法也是無參,起止,N重復(fù),拷貝構(gòu)造,沒啥可說的

4

如上,把所有構(gòu)造方法都演示了一圈,注意,list的區(qū)間構(gòu)造不支持+-操作,因為空間不是連續(xù)的

賦值和交換

5

如上,就是按起止位置或n重復(fù)元素assign成員方法,=重載,以及swap實現(xiàn)2個鏈表的交換

6

如上

大小操作

7

如上,我們還是經(jīng)典的幾個方法,和vector一樣,可以empty判斷是否為空,size返回個數(shù),resize調(diào)整大小,可以使用默認(rèn)參數(shù)補齊或者指定默認(rèn)參數(shù)補齊,鏈表不用容量因為動態(tài)分配內(nèi)存,

8

沒什么說的,就是調(diào)用方法

插入刪除

9
10

如上,我們僅驗證remove,這個是刪除所有值一樣的元素,而不是像python一樣只刪除一個

數(shù)據(jù)存取

11

沒啥說的,就是返回首尾元素,我們list是不支持索引的,不能使用[],at方法,所以必須從首尾元素遍歷過去,不支持隨機(jī)訪問

12

如上,我們可以看到訪問首尾元素,由于不支持隨機(jī)訪問,所以迭代器指針只支持++,--這樣的操作,而不支持+=1,+=3這樣的,而且能--,所以默認(rèn)是雙向鏈表

反轉(zhuǎn)和排序

13

反轉(zhuǎn)和排序就是如上2個方法,reverse和sort

14

如上,沒什么說的

15

當(dāng)然sort方法還可以使用重載,默認(rèn)升序,我們可以傳入一個自定義的方法來比較,我們將方法傳入2個參數(shù),返回前者大于后者(bool值)即實現(xiàn)降序排列,如上。目前還沒有講仿函數(shù),后面講了也可以傳入。我們記得還有deque也可以排序,但并不是成員方法,而是調(diào)用了algorithm模塊的sort方法

16

我們可以來使用判斷復(fù)合參數(shù)排序,類似元組,比如按照姓名降序,如果姓名相同,按照年齡升序,如上就是個小案例

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容