STL之List使用總結

2021-07-29 14:29:33 字數 2445 閱讀 6018

list是我們常用的stl標準容器之一,它是一種序列式容器,在資料結構上和雙向鍊錶結構類似,list中的資料元素是通過鍊錶指標串連邏輯意義上的線性表,因此,鍊錶的特點是支援元素在任意位置的插入刪除,且效率很高。list實際上就是我們資料結構中的雙向鍊錶,它的記憶體是不連續的,通過指標來進行資料訪問,這個使得它效率低下,因此它沒有提供操作符的過載。但是由於鍊錶的特點,他可以很好的效率支援任意地方的刪除和插入。

1. list的初始化及銷毀

(1). 預設建構函式,長度為0的列表

listlis1;

(2).帶有單個整形引數的建構函式,長度為50的列表

listlis2(50);

listlis3(50,1);//長度為50,初始值為1的列表

(3).複製建構函式,構造乙個新的列表lis4,作為已存在的列表lis3的完全複製

listlis4(lis3);

(4).帶兩個常量引數的建構函式,產生初始值為乙個區間的向量。區間由乙個半開區間[first,last) 來指定

listlis5(lis3.begin(),lis3.end());

由上可以看出:lsit和vector的初始化及銷毀是一樣的

2. list常用函式:

(1)begin()和end()

通過呼叫list容器的成員函式begin()得到乙個指向容器起始位置的iterator,可以呼叫list容器的 end() 函式來得到list末端下一位置

(2). push_back() 和push_front()

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

(3). empty()

判斷list()是否為空。

(4).resize()

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

(5).clear()

清空list中的所有元素。

(6).front()和back()

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

(7). pop_back和pop_front()

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

(8).assign()

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

(9).swap()

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

(10). reverse()

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

(11). merge()

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

(12). insert()

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

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

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

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

(13).erase()

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

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

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

#include #include using namespace std;

int main()

cout

cout

}

STL學習 list使用簡要總結

list採用動態儲存分配,不會造成記憶體浪費和溢位,可以通過修改指標來完成插入和刪除,但是對於遍歷消耗較大。同時,list的插入和刪除都不會造成原有的迭代器失效 與vector不同 list lst 預設構造 list beg,end lst list n,elem lst list const l...

教你使用STL容器之list

相較於vector的連續線性空間,list就稍微有點複雜,它的好處是每次插入或刪除乙個元素,就配置或釋放乙個元素空間。list對於空間的運用有絕對的精準,一點也不浪費,而且對於任何位置元素的插入和刪除,list時間複雜度為o 1 list底層是乙個帶頭結點的雙向迴圈鍊錶。list的插入和刪除操作都不...

STL容器之list鍊錶使用

目錄 一 list的概念理解 二 建構函式 三 元素插入和刪除 四 資料訪問 五 大小操作 六 反轉和排序 list鍊錶是將資料元素進行鏈式儲存,在物理單元上是非連續的結構,與vector動態陣列不同,陣列是一片連續的記憶體空間,list鍊錶是由一系列節點組成,而節點是由乙個儲存資料元素的資料域和乙...