鍊錶 List

2021-09-20 06:58:02 字數 4650 閱讀 8826

stl中,list(class list<>的乙個例項)使用乙個doubly linked list管理元素。list不支援隨機訪問,但任何位置上執行元素的安插和移動都非常快。

雙向鍊錶–doubly linked list

};

使用list時必須先包含標頭檔案:

include
其中list型別系定義於namespace std中,是個class template:

namespace std
初始化

操作效果

list c

default建構函式,產生乙個空list,沒有任何元素

list c(c2)

copy建構函式,建立c2的同型list並成為c2的乙份拷貝(所有元素都被複製)

list c = c2

copy建構函式,建立乙個新的list作為c2的拷貝(所有元素都被複製)

list c(rv)

move建構函式,建立乙個新的list,取rvalue rv的內容

list c = rv

move建構函式,建立乙個新的list,取rvalue rv的內容

list c(n)

利用元素的default建構函式生成乙個大小為n的list

list c(n,elem)

建立乙個大小為n的list,每個元素值都是elem

list c(beg,end)

建立乙個list,以區間[beg,end)作為元素初值

list c(initlist)

建立乙個list,以初值列initlist的元素為初值

list c = initlist

建立乙個list,以初值列initlist的元素為初值

c.~list()

銷毀所有元素,釋放記憶體

非變更型操作

操作效果

c.empty()

返回是否容器為空(相當於size()==0但也許較快)

c.size()

返回目前的元素個數

c.max_size()

返回元素個數之最大可能量

c1 == c2

返回c1是否等於c2(對每個元素呼叫==)

c1 != c2

返回c1是否不等於c2(相當於!(c1==c2))

c1 < c2

返回c1是否小於c2

c1 > c2

返回c1是否大於c2(相當於c2c1 <= c2

返回c1是否小於等於c2(相當於!(c2c1 >= c2

返回c1是否大於等於c2(相當於!(c1

賦值操作

操作效果

c = c2

將c2的全部元素賦值給c

c = rv

將rvalue rv的所有元素以move assign方式給予c

c = initlist

將初值列initlist的所有元素賦值給c

c.assign(n,elem)

複製n個elem,賦值給c

c.assign(beg,end)

將區間[beg,end)內的元素賦值給c

c.assign(initlist)

將初值列initlist的所有元素賦值給c

c1.swap(c2)

置換c1和c2的資料

swap(c1,c2)

置換c1和c2的資料

元素訪問

操作效果

c.front()

返回第一元素(不檢查是否存在第一元素)

c.back()

返回最末元素(不檢查是否存在最末元素)

迭代器相關函式

操作效果

c.begin()

返回乙個bidirectional iterator指向第乙個元素

c.end()

返回乙個bidirectional iterator指向最末元素的下一位置

c.cbegin()

返回乙個const bidirectional iterator指向第乙個元素

c.cend()

返回乙個const bidirectional iterator指向最末元素的下一位置

c.rbegin()

返回乙個反向的(reverse)iterator指向反向迭代的第一元素

c.rend()

返回乙個反向的(reverse)iterator指向反向迭代的最末元素的下一位置

c.crbegin()

返回乙個const reverse iterator指向反向迭代的第一元素

c.crend()

返回乙個const reverse iterator指向反向迭代的最末元素的下一位置

插入與移除

操作效果

c.push_back(elem)

附加乙個elem的拷貝於末尾

c.pop_back()

移除最後乙個元素,但是不返回它

c.push_front(elem)

在頭部插入elem的乙個拷貝

c.pop_front()

移除第一元素,但是不返回它

c.insert(pos,elem)

在iterator位置pos之前插入乙個elem拷貝,並返回新元素的位置

c.insert(pos,n,elem)

在iterator位置pos之前插入n個elem拷貝,並返回第乙個新元素的位置(或返回pos–如果沒有新元素的話)

c.insert(pos,beg,end)

在iterator位置pos之前插入區間[beg,end)內所有元素的乙份拷貝,並返回第乙個新元素的位置(或返回pos–如果沒有新元素的話)

c.insert(pos,initlist)

在iterator位置pos之前插入初值列initlist內所有元素的乙份拷貝,並返回第乙個新元素的位置(或返回pos–如果沒有新元素的話

c.emplace(pos,args…)

在iterator位置pos之前插入乙個以args為初值的元素,並返回新元素的位置

c.emplace_back(args…)

附加乙個以args為初值的元素於末尾,不返回任何東西

c.emplace_front(args…)

插入乙個以args為初值的元素於起點,不返回任何東西

c.erase(pos)

移除iterator位置pos上的元素,返回下一元素的位置

c.erase(beg,end)

移除[beg,end)區間內的所有元素,返回下一元素的位置

c.remove(val)

移除所有其值為val的元素

c.remove_if(op)

移除所有「造成op(elem)結果為true」的元素

c.resize(num)

將元素數量改為num(如果size()變大,多出來的新元素都需以default建構函式完成初始化)

c.resize(num,elem)

將元素數量改為num(如果size()變大,多出來的新元素都是elem的拷貝)

c.clear()

移除所有元素,將容器清空

特殊變更型操作

操作效果

c.unique()

如果存在若干相鄰而數值相同的元素,就移除重複元素,只留乙個

c.unique(op)

如果存在若干相鄰元素都使op()的結果為true,則移除重複元素,只留乙個

c.splice(pos,c2)

將c2內所有元素轉移(move)到c之內、迭代器pos之前

c.splice(pos,c2,c2pos)

將c2內c2pos所指元素轉移到c內的pos所指位置(c和c2可相同)

c.splice(pos,c2,c2beg,c2end)

將c2內[c2beg,c2end)區間內元素轉移到c內的pos之前(c和c2可相同)

c.sort()

以operator 《為準則對所有元素排序

c.sort(op)

以op()為準則對所有元素排序

c.merge(c2)

假設c和c2容器都包含已排序(sorted)元素,將c2的全部元素轉移到c,並保證合併後的list在op()準則下仍為已排序

c.merge(c2,op)

假設c和c2容器都包含op()準則下的已排序(sorted)元素,將c2的全部元素轉移到c,並保證合併後的list仍為已排序

c.erverse()

將所有元素反序(reserve the order)

鍊錶list

includeusing namespace std include 鍊錶list stl中的鍊錶是乙個雙向迴圈鍊錶 list的迭代器是雙向迭代器 void printlist const list l coutl1.push back 10 l1.push back 20 l1.push back...

List雙向鍊錶

include 宣告 list int mylist 定義 mylist.push front 1 頭部插入元素 mylist.push back 2 尾部插入元素 pop front 移除頭部元素 pop back 移除尾部元素 list int iterator lter 迭代器定義 iter ...

鍊錶和list

一 stl 的 list 是資料結構的雙向鍊錶,它的記憶體空間可以是不連續的,通過指標來進行資料的訪問,它可以高效率地在任何地方刪除和插入,插入和刪除操作是常數時間的。二 list 和 vector 的優缺點正好相反,它們的應用場景不同。1 vector 插入和刪除操作少,隨機訪問元素頻繁 2 li...