list(連結串列)常用成員(順序容器)----插入push_back,push_front,insert刪除pop_back,pop_front,erase,clear遍歷begin,end判空empt
list標頭檔案:
#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
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_frontpush_front 語法:
void push_front( const TYPE &val ); |
push_front()函式將val連線到連結串列的頭部。
在連結串列的指定位置上插入元素: insertinsert 語法:
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
void pop_back(); |
pop_back()函式刪除連結串列的最後一個元素。
刪除連結串列首部的元素,但不返回連結串列第一個元素的值: pop_frontpop_front 語法:
void pop_front(); |
pop_front()函式刪除連結串列的第一個元素。
刪除連結串列指定位置上的元素: erase
erase 語法:
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 語法:
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 語法:
end()函式返回一個迭代器,指向連結串列的末尾。
連結串列合併 mergemerge 語法:
void merge( list &lst ); void merge( list &lst, Comp compfunction ); |
merge()函式把自己和lst連結串列連線在一起,產生一個整齊排列的組合連結串列。如果指定compfunction,則將指定函式作為比較的依據。
將list中的元素逆序 reversereverse 語法:
void reverse(); |
reverse()函式把list所有元素倒轉。
對list中的元素進行排序 sort
void sort(); void sort( Comp compfunction ); |
sort()函式為連結串列排序,預設是升序。如果指定compfunction的話,就採用指定函式來判定兩個元素的大小。
修改連結串列的長度 resize
修改連結串列的大小,多餘元素用val填充: resize
void resize( size_type num, TYPE val ); |
resize()函式把list的大小改變到num。被加入的多餘的元素都被賦值為val
刪除連結串列中的重複元素 uniqueunique 語法:
void unique(); void unique( BinPred pr ); |
unique()函式刪除連結串列中所有重複的元素。如果指定pr,則使用pr來判定是否刪除。