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來判定是否刪除。
6
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來判定是否刪除。