深入學習STL系列(3) list

2021-08-21 09:32:35 字數 3133 閱讀 2869

ø  list

list是一種雙向鍊錶,不同於vector的連續記憶體儲存,它在記憶體中以節點的形式存在,每個節點都存著指向上下節點的指標。下面我們將以儲存int型元素的list為例,仔細講解如何使用list。

---建立list---

list

<

int>

il;            //方式1,構建乙個空的容器物件

list

<

int>

ivl(2, 9);  //方式2,構建乙個包含2個值為9的容器物件

inta[4] = ;

list

<

int>

il(a, a+3);       //方式3,利用陣列指標構建容器物件(也可以利用其它容器迭代器)

list

<

int>

il2(

il); 

//方式4

,利用其它vector物件構建容器物件

list

<

int>

il3=

il;   

//方式4

的另一種寫法

---插入操作---

il.push_front

(2); 

//方式1

,在隊首插入乙個元素

il.push_back

(2); 

//方式2

,在隊尾插入乙個元素

il.insert

(il.begin(),5); 

//方式3

,在指定位置插入1個元素

il.insert

(il.begin()+1,3, 9);   

//方式4

,在指定位置插入多個元素

il.emplace

(il.begin(),1);

//方式5

,在指定位置插入1個元素(比insert效率高)

il.emplace_front

(1);            

//方式6

,在隊首插入1個元素

il.emplace_back

(1);            

//方式7

,在隊尾插入1個元素

---刪除操作---

il.erase

(il.begin());                          

//方式1

,刪除指定位置的1個元素

il.erase

(il.begin(),il.begin() + 2);

//方式2

,刪除指定位置的多個元素

il.pop_front

();                               

//方式3

,刪除隊首元素

il.pop_back

();                                

//方式4

,刪除隊尾元素

il.remove

(val);                                

//方式5

,刪除所有值為val

的元素il.

remove_if

(_pred);                         

//方式6,

刪除所有滿足_pred

的元素il.

unique

();                                      //

方式7,

刪除連續重複元素,比如1-2-2-1

,處理後變為1-2-1

il.clear

();                                       

//方式8

,清空所有元素

---檢視操作---

il.front

();    

//方式1

,檢視頭部的元素

il.back

();    

//方式2

,檢視尾部的元素

*il.

begin

(); 

//方式3

,使用迭代器檢視元素

###list

容器不支援隨機訪問!###

---遍歷操作---

//從前往後遍歷

for(vector::iteratoriter = il.begin(); iter++; iter!= il.end())

//從後往前遍歷

for(vector::iteratoriter = il.rbegin(); iter++; iter!= il.rend())

//利用for_each進行遍歷

for_each

(iter.begin(),iter.end(), dosomething);

---其它操作---

il.empty

();             

//判斷容器是否為空

il.assign

(5,2);   

//清空所有元素,並插入5

個值為2的元素

il.assign

(iter1,iter2);//

清空所有元素,通過迭代器或陣列指標插入資料

il.merge

(il2);          

//合併il2

,並且按照增序排列,list2將被清空

il.splice

(il.begin(),il2);//

合併il2

,il2將被清空

---注意事項---

與vector支援隨機訪問不同,list不支援隨機訪問,因為list是一種不連續記憶體容器。每次插入乙個節點,就動態分配乙個節點的空間;每次刪除乙個節點,就動態釋放該節點的空間。

同樣,由於list不會發生像vector一樣的記憶體重新分配、搬移,所以插入和刪除節點不會是之前的迭代器失效。

Redis學習3 list操作

在name對應的list中新增元素,只有name已經存在時,值新增到列表的最左邊 更多 rpushx name,value 表示從右向左操作 llen name name對應的list元素的個數 linsert name,where,refvalue,value 在name對應的列表的某乙個值前或後...

深入學習STL系列(2) vector

如果容器是你對stl的唯一印象,說明你利器 stl 在手而未能善用。容器可以分為序列容器 sequential containers 和關聯容器 associative containers 下面我們將從建立 插入 刪除 檢視五個方面演示如何使用容器。序列容器中常見的vector list dequ...

C STL學習之四 容器list深入學習

一 list基礎 list使用乙個雙向鍊錶來管理元素。圖一顯示了list的結構。圖一 list的結構 任何型別只要具備賦值和可拷貝兩種性質,就可以作為list的元素。二 list的功能 list的內部結構和vector和deque截然不同,在很多方面都表現不同 1 list不支援隨機訪問。所及既不提...