STL模板庫list使用

2021-10-18 12:42:50 字數 2436 閱讀 1914

list() 宣告乙個空列表;

list(n) 宣告乙個有n個元素的列表,每個元素都是由其預設建構函式t()構造出來的

list(n,val) 宣告乙個由n個元素的列表,每個元素都是由其複製建構函式t(val)得來的

list(n,val) 宣告乙個和上面一樣的列表

list(first,last) 宣告乙個列表,其元素的初始值**於由區間所指定的序列中的元素

通過呼叫list容器的成員函式begin()得到乙個指向容器起始位置的iterator,可以呼叫list容器的 end() 函式來得到list末端下一位置,相當於:int a[n]中的第n+1個位置a[n],實際上是不存在的,不能訪問,經常作為迴圈結束判斷結束條件使用。

使用list的成員函式push_back和push_front插入乙個元素到list中。其中push_back()從list的末端插入,而 push_front()實現的從list的頭部插入。

利用empty() 判斷list是否為空。

如果呼叫resize(n)將list的長度改為只容納n個元素,超出的元素將被刪除,如果需要擴充套件那麼呼叫預設建構函式t()將元素加到list末端。如果呼叫resize(n,val),則擴充套件元素要呼叫建構函式t(val)函式進行元素構造,其餘部分相同。**

清空list中的所有元素。

通過front()可以獲得list容器中的頭部元素,通過back()可以獲得list容器的最後乙個元素。但是有一點要注意,就是list中元素是空的時候,這時候呼叫front()和back()會發生什麼呢?實際上會發生不能正常讀取資料的情況,但是這並不報錯,那我們程式設計序時就要注意了,個人覺得在使用之前最好先呼叫empty()函式判斷list是否為空。

通過刪除最後乙個元素,通過pop_front()刪除第乙個元素;序列必須不為空,如果當list為空的時候呼叫pop_back()和pop_front()會使程式崩掉。

具體和vector中的操作類似,也是有兩種情況,第一種是:l1.assign(n,val)將 l1中元素變為n個t(val)。第二種情況是:l1.assign(l2.begin(),l2.end())將l2中的從l2.begin()到l2.end()之間的數值賦值給l1。

交換兩個鍊錶(兩個過載),乙個是l1.swap(l2); 另外乙個是swap(l1,l2),都可能完成連個鍊錶的交換。

通過reverse()完成list的逆置。

合併兩個鍊錶並使之預設公升序(也可改),l1.merge(l2,greater()); 呼叫結束後l2變為空,l1中元素包含原來l1 和 l2中的元素,並且排好序,公升序。其實預設是公升序,greater()可以省略,另外greater()是可以變的,也可以不按公升序排列。

當源list均有序時,得到的list仍是有序的

當源list無序時,得到的list不能保證有序,之所以這樣說是因為,當list1的前兩個元素即表現出無序時,合併後的結果將是直接把list2接到list1的後面。

看一下下面的程式:

#include#includeusing namespace std;

int main()

cout << endl;

l1.sort();

cout << "l1: ";

for (iter = l1.begin(); iter != l1.end(); ++iter)

cout << endl;

cout << "l2: ";

for (iter = l2.begin(); iter != l2.end(); ++iter)

cout << endl;

l1.erase(l1.begin(), ++l1.begin());

cout << "l1 after erase: ";

for (iter = l1.begin(); iter != l1.end(); ++iter)

cout << endl;

l1.merge(l2);

cout << "l1 after plus l2:";

for (iter = l1.begin(); iter != l1.end(); ++iter)

cout << endl;

cout << "end" << endl;

}

在指定位置插入乙個或多個元素(三個過載):

l1.insert(l1.begin(),100); 在l1的開始位置插入100。

l1.insert(l1.begin(),2,200); 在l1的開始位置插入2個100。

l1.insert(l1.begin(),l2.begin(),l2.end());在l1的開始位置插入l2的從開始到結束的所有位置的元素。

刪除乙個元素或乙個區域的元素(兩個過載)

l1.erase(l1.begin()); 將l1的第乙個元素刪除。

l1.erase(l1.begin(),l1.end()); 將l1的從begin()到end()之間的元素刪除。

STL標準模板庫 list的使用

zz 李木空間 www.limou.net 在使用list必須包括標頭檔案 include include int main void 使用list的成員函式push back和push front插入乙個元素到list中 clist.push back a 把乙個物件放到乙個list的後面 cli...

STL標準模板庫 list

原 2017年02月26日 21 12 15 老樊lu碼 閱讀數 46880 更多分類專欄 c 資料結構 c c c 開發實戰365 一 list定義 list是stl實現的雙向鍊錶,與向量 vectors 相比,它允許快速的插入和刪除,但是隨機訪問卻比較慢。使用時需要新增標頭檔案 include ...

STL模板整理 list

list容器是一種序列式容器,它是stl實現的雙向鍊錶,與vector相比它可以實現快速的插入和刪除,但是不能夠快速的隨機訪問。include list 宣告乙個空列表 list n 宣告乙個有n個元素的列表,每個元素都是由其預設建構函式t 構造出來的 list n,val 宣告乙個由n個元素的列表...