STL系列(3):List 雙向鏈表

List是一個線性鏈表結構,它的數據由若干個節點構成,每一個節點都包括一個信息塊(即實際存儲的數據)、一個前驅指針和一個後驅指針。它無需分配指定的內存大小且可以任意伸縮,這是因爲它存儲在非連續的內存空間中,並且由指針將有序的元素鏈接起來。  

由於其結構的原因,list 隨機檢索的性能非常的不好,因爲它不像vector 那樣直接找到元素的地址,而是要從頭一個一個的順序查找,這樣目標元素越靠後,它的檢索時間就越長。檢索時間與目標元素的位置成正比。  

雖然隨機檢索的速度不夠快,但是它可以迅速地在任何節點進行插入和刪除操作。因爲list 的每個節點保存着它在鏈表中的位置,插入或刪除一個元素僅對最多三個元素有所影響,不像vector 會對操作點之後的所有元素的存儲地址都有所影響,這一點是vector 不可比擬的。  

list 的特點: 

(1) 不使用連續的內存空間這樣可以隨意地進行動態操作; (2) 可以在內部任何位置快速地插入或刪除,當然也可以在兩端進行push和pop 。 (3) 不能進行內部的隨機訪問,即不支持[ ] 操作符和vector.at() ; 

List將元素按順序儲存在鏈表中,與向量(vectors)相比,它允許快速的插入和刪除,但是隨機訪問卻比較慢. 

函數介紹:

1.assign() 給list賦值 
語法: 
void assign( input_iterator start, input_iterator end );  //以迭代器start和end指示的範圍爲list賦值 

void assign( size_type num, const TYPE &val ); //賦值num個以val爲值的元素。 

2.back() 返回最後一個元素的引用 

3.begin() 返回指向第一個元素的迭代器 

4.clear() 刪除所有元素 

5.empty() 如果list是空的則返回true 

6.end() 返回末尾的迭代器 

7.erase() 刪除一個元素 
語法: 
iterator erase( iterator loc );//刪除loc處的元素 
iterator erase( iterator start, iterator end ); //刪除start和end之間的元素 

8.front() 返回第一個元素的引用 

9.get_allocator() 返回list的配置器 

10.insert() 插入一個元素到list中 
語法: 
iterator insert( iterator loc, const TYPE &val ); 
//在指定位置loc前插入值爲val的元素,返回指向這個元素的迭代器, 

void insert( iterator loc, size_type num, const TYPE &val );  //定位置loc前插入num個值爲val的元素 
void insert( iterator loc, input_iterator start, input_iterator end ); //在指定位置loc前插入區間[start, end)的所有元素 

11.max_size() 返回list能容納的最大元素數量 

12.merge() 合併兩個list 
語法: 
void merge( list &lst );//把自己和lst鏈表連接在一起 

void merge( list &lst, Comp compfunction ); //指定compfunction,則將指定函數作爲比較的依據。

13.pop_back() 刪除最後一個元素 

14.pop_front() 刪除第一個元素 

15.push_back() 在list的末尾添加一個元素 

16.push_front() 在list的頭部添加一個元素 

17.rbegin() 返回指向第一個元素的逆向迭代器 

18.remove() 從list刪除元素 
語法: 
void remove( const TYPE &val ); //刪除鏈表中所有值爲val的元素 

19.remove_if() 按指定條件刪除元素 

20.rend() 指向list末尾的逆向迭代器 

21.resize() 改變list的大小 
語法: 
void resize( size_type num, TYPE val );  
//把list的大小改變到num。被加入的多餘的元素都被賦值爲val

22.reverse() 把list的元素倒轉 

23.size() 返回list中的元素個數 

24.sort() 給list排序 
語法:  
void sort();//爲鏈表排序,默認是升序 
void sort( Comp compfunction );//採用指定函數compfunction來判定兩個元素的大小。 

25.splice() 合併兩個list 
語法:  
void splice( iterator pos, list &lst );//把lst連接到pos的位置 
void splice( iterator pos, list &lst, iterator del );//插入lst中del所指元素到現鏈表的pos上 

void splice( iterator pos, list &lst, iterator start, iterator end );//用start和end指定範圍。

26.swap() 交換兩個list 

語法: 
void swap( list &lst );// 交換lst和現鏈表中的元素 

27.unique() 刪除list中重複的元素 
語法: 
void unique();//刪除鏈表中所有重複的元素 
void unique( BinPred pr );// 指定pr,則使用pr來判定是否刪除。


















 
void merge( list &lst );//把自己和lst鏈表連接在一起 void merge( list &lst, Comp compfunction ); 
//指定compfunction,則將指定函數作爲比較的依據。 
13.pop_back() 刪除最後一個元素 14.pop_front() 刪除第一個元素 
15.push_back() 在list的末尾添加一個元素 16.push_front() 在list的頭部添加一個元素 17.rbegin() 返回指向第一個元素的逆向迭代器 18.remove() 從list刪除元素 
語法: 
void remove( const TYPE &val ); //刪除鏈表中所有值爲val的元素 
19.remove_if() 按指定條件刪除元素 20.rend() 指向list末尾的逆向迭代器 21.resize() 改變list的大小 
語法: 
void resize( size_type num, TYPE val );  
//把list的大小改變到num。被加入的多餘的元素都被賦值爲val22. 
22.reverse() 把list的元素倒轉 23.size() 返回list中的元素個數 24.sort() 給list排序 
語法:  
void sort();//爲鏈表排序,默認是升序 
void sort( Comp compfunction );//採用指定函數compfunction來判定兩個元素的大小。 
25.splice() 合併兩個list 
語法:  
void splice( iterator pos, list &lst );//把lst連接到pos的位置 
void splice( iterator pos, list &lst, iterator del );//插入lst中del所指元素到現鏈表的pos上 void splice( iterator pos, list &lst, iterator start, iterator end );//用start和end指定範圍。 
26.swap() 交換兩個list 
語法: 
void swap( list &lst );// 交換lst和現鏈表中的元素 
27.unique() 刪除list中重複的元素 
語法: 
void unique();//刪除鏈表中所有重複的元素 
void unique( BinPred pr );// 指定pr,則使用pr來判定是否刪除。

發佈了25 篇原創文章 · 獲贊 7 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章