STL順序容器 list

2021-06-28 09:23:09 字數 2903 閱讀 1145

list是乙個線性鍊錶結構,它的資料由若干個節點構成,每乙個節點都包括乙個

息塊(即實際儲存的資料)、乙個前驅指標和乙個後驅指標。它無需分配指定

記憶體大小且可以任意伸縮,這是因為它儲存在非連續的記憶體空間中,並且由指

針將有序的元素鏈結起來。

由於其結構的原因,list 隨機檢索的效能非常的不好,因為它不像vector 那

樣直接找到元素的位址,而是要從頭乙個乙個的順序查詢,這樣目標元素越靠後,

它的檢索時間就越長。檢索時間與目標元素的位置成正比。

雖然隨機檢索的速度不夠快,但是它可以迅速地在任何節點進行插入和刪除

操作。因為list 的每個節點儲存著它在鍊錶中的位置,插入或刪除乙個元素僅對

最多三個元素有所影響,不像vector 會對操作點之後的所有元素的儲存位址都有

所影響,這一點是vector 不可比擬的。

list 的特點:

(1) 不使用連續的記憶體空間這樣可以隨意地進行動態操作;

(2) 可以在內部任何位置快速地插入或刪除,當然也可以在兩端進行push和pop 。

(3) 不能進行內部的隨機訪問,即不支援[ ] 操作符和vector.at() ;

lists將元素按順序儲存在鍊錶中,與向量(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。被加入的多餘的元素都被賦值為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來判定是否刪除。

STL 順序容器 列表list

list和雙向鍊錶結構相似,每個節點包含乙個資料塊,前向指標,和後向指標,儲存在非連續的記憶體空間中 很顯然,查詢操作時,只能順序查詢,不支援內部隨機訪問 不像陣列,向量vectoer,佇列可以用下標查詢 但是可以在任意序列位置插入和刪除,這是vector和queue deque 無法比擬的 而且相...

順序容器 List

assign 給list賦值 back 返回最後乙個元素 begin 返回指向第乙個元素的迭代器 clear 刪除所有元素 empty 如果list是空的則返回true end 返回末尾的迭代器 erase 刪除乙個元素 front 返回第乙個元素 get allocator 返回list的配置器 ...

順序容器list

以下內容參考stl原始碼剖析 相較於vector的連續線性空間,list就更為複雜。其好處是每次插入或刪除乙個元素,就配置或釋放乙個元素空間。因此list對於任何位置的元素插入或移除,永遠是常數。是乙個環狀雙向鍊錶,只有乙個指向空節點的指標node push front和push back void...