ø 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不支援隨機訪問。所及既不提...