相較於vector的連續線性空間,list就稍微有點複雜,它的好處是每次插入或刪除乙個元素,就配置或釋放乙個元素空間。list對於空間的運用有絕對的精準,一點也不浪費,而且對於任何位置元素的插入和刪除,list時間複雜度為o(1)。list底層是乙個帶頭結點的雙向迴圈鍊錶。
list的插入和刪除操作都不會造成原有的list的迭代器失效,但在vector中,vector的插入操作可能導致原有的迭代器失效,甚至list的刪除操作,只有「指向被刪除元素」的那個迭代器失效,其他迭代器不受影響。
模擬實現list
#include
list
list1;
list
list2(5,2);
list
list3(list2.begin(), list2.end());
list
list4(list2);
int arr=;
list
list5(arr, arr+sizeof(arr)/sizeof(arr[0]));
(1)容量(capacity)list.empty();//判空
list.size();//元素個數
list.max_size();//最大儲存元素個數
list.resize(newsize);//更改元素個數
(2)修改(modifiers)list
.assign();//多個元素賦值
list
.push_front(data);//頭插
list
.pop_front();//頭刪
list
.push_back(data);//尾插
list
.pop_back();//尾刪
list
.insert(pos, data);//指定位置插入元素
list
.erase();//指定位置刪除元素
list1.swap(list2);//交換兩個list
list
.clear();//清除元素
(3)迭代器(iterators)list.begin();//開始指標
list.end();//末尾指標
list.rbegin();//反向迭代器的開始指標
list.rend();//反向迭代器的末尾指標
(4)元素訪問(element accsess)list.front();//list頭部元素
list.back();//list尾部元素
(5)演算法(operations)list.splice();//指定位置合併兩個list
list.remove();//從list中刪除元素
list.remove_if();//按指定條件刪除元素
list.unique();//刪除list中的重複元素
list.merge();//合併兩個list
list.sort();//排序,預設公升序
list.reverse();//翻轉元素
檢視幫助文件進一步學習 教你使用STL容器之vector
c 語言本身提供了乙個序列式容器array,stl另外再提供vector list deque stack queue priority queue等序列式容器。vector的資料安排以及操作方式,與array是很相似的,唯一的不同點在於空間的運用的靈活性,array是靜態的,一旦配置了就不能再改變...
STL通用容器之 list 容器
list容器 相對於vector的連續線性空間,list是乙個雙向鍊錶,它有乙個重要性質 插入操作和刪除操作都不會造成原有的list迭 器失效,每次插入或刪除乙個元素,就配置或釋放乙個元素空間。也就是說,對於任何位置的元素插入或刪除,list 遠是常數時間。1 建構函式 listc 建立乙個空的li...
STL容器之list鍊錶使用
目錄 一 list的概念理解 二 建構函式 三 元素插入和刪除 四 資料訪問 五 大小操作 六 反轉和排序 list鍊錶是將資料元素進行鏈式儲存,在物理單元上是非連續的結構,與vector動態陣列不同,陣列是一片連續的記憶體空間,list鍊錶是由一系列節點組成,而節點是由乙個儲存資料元素的資料域和乙...