#include <list>
using namespace std;
list和vector的不同在於,vector採用的順序存儲,即vector中的元素像數組一樣,一個緊挨着一個存放。
所以vector可以進行隨機存取。(通常情況下使用vector是最優的選擇)。但是每當從vector中刪除一個元素或向vector中插入一個元素時,代價都比較高。
而list則不一樣。list採用鏈式存儲方法,所以list不能隨機存取,但是在list插入和刪除元素的代價都非長笑。
list的常用接口:
判空 empty
empty
語法:
bool empty();
|
empty()函數返回真(true)如果鏈表爲空,否則返回假。例如:
list<int> the_list; for( int i = 0; i < 10; i++ ) the_list.push_back( i ); while( !the_list.empty() ) { cout << the_list.front() << endl; the_list.pop_front(); }
獲取list中元素的個數 size
size
語法:
size_type size();
|
size()函數返回list中元素的數量。
增 push_back push_front insert
在鏈表的尾部插入元素: push_back
push_back
語法:
void push_back( const TYPE &val ); |
push_back()將val連接到鏈表的最後。例如:
list<int> the_list;
for( int i = 0; i < 10; i++ ){
the_list.push_back( i );
}
在鏈表的首部插入元素: push_front
push_front
語法:
void push_front( const TYPE &val ); |
push_front()函數將val連接到鏈表的頭部。
在鏈表的指定位置上插入元素: insert
insert
語法:
iterator insert( iterator pos, const TYPE &val ); void insert( iterator pos, size_type num, const TYPE &val ); void insert( iterator pos, input_iterator start, input_iterator end ); |
insert()插入元素val到位置pos,或者插入num個元素val到pos之前,或者插入start到end之間的元素到pos的位置。返回值是一個迭代器,指向被插入的元素。
刪 pop_back pop_front erase clear
刪除鏈表的最後一個元素,但不返回鏈表最後一個元素的值: pop_back
pop_back
語法:
void pop_back();
|
pop_back()函數刪除鏈表的最後一個元素。
刪除鏈表首部的元素,但不返回鏈表第一個元素的值: pop_front
pop_front
語法:
void pop_front();
|
pop_front()函數刪除鏈表的第一個元素。
刪除鏈表指定位置上的元素: erase
erase
語法:
iterator erase( iterator pos ); iterator erase( iterator start, iterator end ); |
erase()函數刪除以pos指示位置的元素, 或者刪除start和end之間的元素。 返回值是一個迭代器,指向最後一個被刪除元素的下一個元素。
刪除鏈表中的所有元素 clear
clear
語法:
void clear();
|
clear()函數刪除list的所有元素。
獲取鏈表最後一個元素back 和 第一個元素front
獲取list的最後一個元素,但不刪除最後一個元素:
back
語法:
reference back();
|
back()函數返回一個引用,指向list的最後一個元素。
獲取list的第一個元素,但不刪除第一個元素:
front
語法:
reference front();
|
front()函數返回一個引用,指向鏈表的第一個元素。
list<int> the_list; for( int i = 0; i < 10; i++ ) the_list.push_back( i ); while( !the_list.empty() ) { cout << the_list.front() << endl; the_list.pop_front(); }
遍歷鏈表 begin end
獲取指向list第一個元素的迭代器:
begin
語法:
iterator begin(); |
begin()函數返回一個迭代器,指向list的第一個元素。例如,
// 創建一個元素類型是字符的鏈表 list<char> charList; for( int i=0; i < 10; i++ ) charList.push_front( i + 65 );
// 顯示這個鏈表 list<char>::iterator theIterator; for( theIterator = charList.begin(); theIterator != charList.end(); theIterator++ ) cout << *theIterator;
獲取指向list末尾的迭代器: end 語法:
iterator end(); |
end()函數返回一個迭代器,指向鏈表的末尾。
鏈表合併 merge
merge
語法:
void merge( list &lst ); void merge( list &lst, Comp compfunction );
|
merge()函數把自己和lst鏈表連接在一起,產生一個整齊排列的組合鏈表。如果指定compfunction,則將指定函數作爲比較的依據。
將list中的元素逆序 reverse
reverse
語法:
void reverse();
|
reverse()函數把list所有元素倒轉。
對list中的元素進行排序 sort
排序(sort)
語法:
void sort(); void sort( Comp compfunction );
|
sort()函數爲鏈表排序,默認是升序。如果指定compfunction的話,就採用指定函數來判定兩個元素的大小。
修改鏈表的長度 resize
修改鏈表的大小,多餘元素用val填充: resize
resize
語法:
void resize( size_type num, TYPE val ); |
resize()函數把list的大小改變到num。被加入的多餘的元素都被賦值爲val
刪除鏈表中的重複元素 unique
unique
語法:
void unique(); void unique( BinPred pr );
|
unique()函數刪除鏈表中所有重複的元素。如果指定pr,則使用pr來判定是否刪除。