一、list基礎
list使用乙個雙向鍊錶來管理元素。圖一顯示了list的結構。
圖一 list的結構
任何型別只要具備賦值和可拷貝兩種性質,就可以作為list的元素。
二、list的功能
list的內部結構和vector和deque截然不同,在很多方面都表現不同:
1、list不支援隨機訪問。所及既不提供下表操作符,也不提供at()函式。
2、任何位置上插入元素刪除元素都很快。
3、插入和刪除操作不會造成指向其他元素的pointers、references、iterators失效。
4、list對於異常的處理方式是:要麼成功,要麼什麼都不發生。
5、不提供容量、空間重新分配等操作函式。
6、提供了一些函式專門用於移動元素。
三、list的操作函式
生成、賦值和銷毀與序列式容器相同。
建構函式和析構函式:
非變動性操作
賦值
元素訪問
一般來說,這些操作不會檢查元素是否為空,所以程式設計師必須保證容器不為空。
迭代器相關函式
訪問元素只能用迭代器。然而由於list不能隨機訪問,這些迭代器只是雙向而非隨機迭代器。所以凡是用到隨機訪問迭代器的演算法(所有用來操作元素順序的演算法-特別是排序演算法都歸於此類)都不能呼叫。不過可以用list的成員函式sort()完成此功能。
元素的插入和刪除
list提供deque的多餘功能,還增加了remove()和remove_if()演算法應用於list『身上的特殊版本。這些成員函式比stl的remove演算法更快,因為它們只進行內部指目標工作,無需估計元素。
要將所有與某值相等的元素刪除,可以用如下語句(注意:確實是將這些元素刪除了,而不是像vector那樣只是某種移動而已)
listlist1;
list1.remove(val);
list還提供了其他一些成員函式,用來改變元素和區間的次序,或是重新串鏈。我們可以用他們來移動單一list裡的元素,也可以移動兩個list之間的元素(前提是list的型別一致)。
四、list的異常處理
在所有的stl標準容器中,list提供了最佳支援。幾乎所有的操作都是要麼正確,要麼什麼都不發生。只有少數幾個操作沒有這樣的保證:賦值和sort()。不過他們也不會洩露資源,也不會與容器的恆常特性發生衝突。merge(),remove(),remove_if(),unique()提供的保證是有前提的l就是元素間的比較動作不會丟擲異常。
五、list示例程式
#include #include #include using namespace std;
void outputlists(const list&l1,const list&l2)
int main()
outputlists(ilist1,ilist2);
ilist2.splice(ilist2.end(),ilist2,ilist2.begin());
outputlists(ilist1,ilist2);
ilist2.sort();
outputlists(ilist1,ilist2);
ilist2.unique();
outputlists(ilist1,ilist2);
ilist1.merge(ilist2);
outputlists(ilist1,ilist2);
/*outputlists(ilist3,ilist1);
ilist1.merge(ilist3);
outputlists(ilist3,ilist1);*/
}
執行結果:
注意:merge只使用與合併兩個元素已序(而且都是公升序)排列的的容器。如上面的程式,最後merge ilist1和ilist3程式就會報錯。
C STL常用容器總結之四 鍊錶list
list是每個節點包含前驅指標 後繼指標和資料域三個部分的雙向鍊錶。list不提供隨機訪問,訪問元素需要按順序走到需訪問的元素,時間複雜度為o n 在list的任何位置上執行插入或刪除操作都非常迅速,只需在list內部調整一下指標。list不僅是乙個雙向鍊錶,而且還是乙個環狀雙向鍊錶。所以它只需要乙...
C STL常用容器總結之四 鍊錶list
list是每個節點包含前驅指標 後繼指標和資料域三個部分的雙向鍊錶。list不提供隨機訪問,訪問元素需要按順序走到需訪問的元素,時間複雜度為o n 在list的任何位置上執行插入或刪除操作都非常迅速,只需在list內部調整一下指標。list不僅是乙個雙向鍊錶,而且還是乙個環狀雙向鍊錶。所以它只需要乙...
C STL 常用容器 list
鍊錶是一種物理儲存單元上非連續 非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈結次序實現的。鍊錶由一系列結點 鍊錶中每乙個元素稱為結點 組成,結點可以在執行時動態生成。每個結點包括兩個部分 乙個是儲存資料元素的資料域,另乙個是儲存下乙個結點位址的指標域。相較於vector的連續線性空間,l...