STL之四 list用法詳解

2021-07-10 08:54:29 字數 2908 閱讀 1256

相對於vector容器的連續線性空間,list是乙個雙向鍊錶,它有乙個重要性質:插入操作和刪除操作都不會造成原有的list迭代器失效,每次插入或刪除乙個元素就配置或釋放乙個元素空間。也就是說,對於任何位置的元素插入或刪除,list永遠是常數時間。

常用函式

listc:建立乙個空的list

listc1(c2):複製另乙個同型別元素的list

listc(n):建立n個元素的list,每個元素值由預設建構函式確定

listc(n,elem):建立n個元素的list,每個元素的值為elem

listc(begin,end):由迭代器建立list,迭代區間為[begin,end)

int size() const:返回容器元素個數

bool empty() const:判斷容器是否為空,若為空則返回true

void push_back(const t& x):list元素尾部增加乙個元素x

void push_front(const t& x):list元素首元素錢新增乙個元素x

void pop_back():刪除容器尾元素,當且僅當容器不為空

void pop_front():刪除容器首元素,當且僅當容器不為空

void remove(const t& x):刪除容器中所有元素值等於x的元素

void clear():刪除容器中的所有元素

iterator insert(iterator it, const t& x ):在迭代器指標it前插入元素x,返回x迭代器指標

void insert(iterator it,size_type n,const t& x):迭代器指標it前插入n個相同元素x

void insert(iterator it,const_iterator first,const_iteratorlast):把[first,last)間的元素插入迭代器指標it前

iterator erase(iterator it):刪除迭代器指標it對應的元素

iterator erase(iterator first,iterator last):刪除迭代器指標[first,last)間的元素

iterator begin():返回首元素的迭代器指標

iterator end():返回尾元素之後位置的迭代器指標

reverse_iterator rbegin():返回尾元素的逆向迭代器指標,用於逆向遍歷容器

reverse_iterator rend():返回首元素前乙個位置的迭代器指標

reference front():返回首元素的引用

reference back():返回尾元素的引用 

void sort():容器內所有元素排序,預設是公升序

templatevoid sort(pred pr):容器內所有元素根據預斷定函式pr排序

void swap(list& str):兩list容器交換功能

void unique():容器內相鄰元素若有重複的,則僅保留乙個

void splice(iterator it,list& li):佇列合併函式,佇列li所有函式插入迭代指標it前,x變成空佇列

void splice(iterator it,list& li,iterator first):佇列li中移走[first,end)間元素插入迭代指標it前

void splice(iterator it,list& li,iterator first,iterator last):x中移走[first,last)間元素插入迭代器指標it前

void reverse():反轉容器中元素順序

正向迭代器與逆向迭代器表示形式是不一樣的,前者是iterator,後者是reverse_iterator。逆向顯示並不會改變元素在容器中的位置,只是逆向顯示。

從允許結果可以看出,兩個鍊錶merge合併前,一般都已經俺公升序排好序,合併後的鍊錶仍然是公升序排列。merge操作是資料移動操作,不是複製操作,因此t1.merge(t2)表示把test2中所有元素依次移動並插入到源鍊錶test的適當位置,test增加了多少個元素,test2就減少了多少個元素。若用test.splice(test.begin(),test2)代替程式中的test.merge(test2),其餘不變,就能看出splice的特點。splice()完成的是拼接功能,也是資料移動操作,不慎複製操作。test.splice(test.begin(),test2)表明把test2中所有元素整體地移動到原始鍊錶test的首元素前,test增加了多少個元素,test2就減少了多少個元素。如上述**所述,test,test2排序後,test=,test2=. test.splice(test.begin(),test2)後,test=,test2={};test.merge(test2)後,test=,test2={}

STL之list函式詳解

list使用雙向鍊錶來管理元素,可以從兩端發展新元素,其內部結構如圖1所示。圖1 list的結構 list的內部結構和vetor或deque截然不同,主要的區別入下 list所提供的成員函式區別 list的好處是不論在任何位置,元素的安插和移除都只需要常數時間。如果我們要將若干元素從a容器移動b容器...

STL之List用法注意問題

以前一直用的mfc相關的內庫,最近發現在 實現時用stl相關的庫更好用,也更易移植,但是有些問題要問題,比如list的用法中,如果希望在遍歷的時候同時刪除掉一些元素,必須要注意iterator的移動方式。下面的例子給出了很好的說明。stl中的容器按儲存方式分為兩類,一類是按以陣列形式儲存的容器 如 ...

STL學習之七 list用法示例

本文介紹stl中的list的用法示例。下面是list的知識點 1 list 是乙個雙向鍊錶容器 可以高效的進行插入與刪除 不可以隨機儲存元素 不支援at.pos 函式和操作符 2 list 的迭代器 可以 但不可以 it 3 3 list 結點序號從0號位置開始 4 list 的插入 當指標指向 插...