教你使用STL容器之list

2021-08-22 19:15:14 字數 1621 閱讀 3992

相較於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鍊錶是由一系列節點組成,而節點是由乙個儲存資料元素的資料域和乙...