目錄
今天我們終於來到了c++的list章節,在講解之前,先回顧一下前面的vector和string吧.
vector和string的底層都是用的順序表,因此其空間在物理結構上連續的.而今天的list卻不一樣,它在物理上是散亂的.因為list本質上是乙個鍊錶!,並且是乙個帶頭雙向迴圈鍊錶,在前面的資料結構章節,還記得博主的鍊錶實現嗎?還疑惑博主為什麼對於鍊錶的起名很怪嗎?因為就是為了今天的list講解呀~
今天博主也主要將從list的構造使用,迭代器使用,相關容量操作,以及元素訪問和資料修改等方面進行闡述
建構函式的使用主要有4個,分別如下
list()
構造空的list
list (size_type n, const value_type& val = value_type())
構造的list中包含n個值為val的元素
list (const list& x)
拷貝建構函式
list (inputiterator first, inputiterator last)
用[first, last)區間中的元素構造list
不需要傳入任何引數,直接利用list類模板定義物件
list l1; //定義int型鍊錶
list l2; //定義char型鍊錶
list l3; //定義double型鍊錶
//上面的三個物件,內容都空
按照上面的定義直接傳參即可
list l1(4,5); //定義int型鍊錶,含有4個5
list l2(3,'s'); //定義char型鍊錶,含有3個's'
list l3(4,2.3); //定義double型鍊錶,含有4個2.3
即傳入乙個同型別的list
list l1(4,5); //定義int型鍊錶,含有4個5
list l2(l1); //把l1的內容複製乙份給了l2
**這裡有個注意點,迭代區間是左閉右開的!**即不包含右邊界.
int num[4] = ;
list l1(3,'w');
程式設計客棧list l2(l1.begin(),l1.end()); //end()是最後乙個元素位置的下乙個元素位置,所以不包括,因此l2的內容是 'w' 'w' 'w'
list l3(num,num + 3); //因為num+3的位置,索引為3,但是迭代區間左閉右開,所以不包括索引3位置,內容為1 2 3
c++提供了如下:
函式宣告
介面說明
begin() + end()
返回第乙個元素的迭代器+返回最後乙個元素下乙個位置的迭代器
rbegin() + rend()
返回第乙個元素的reverse_iterator,即end位置 + 返回最後乙個元素下乙個位置的reverse_iterator,即begin位置
int num[5] = ;
list li(num,num+5); //建立內容為1 2 3 4 5的鍊錶
list::iterator it = li.begin();
while(it = li.end())
;list li(num,num+5); //建立內容為1 2 3 4 5的鍊錶
list::iterator it = li.rbegin();
while(it = li.rend())
;list li(num,num+5); //建立內容為1 2 3 4 5的鍊錶
list li1;
if(li.empty())
;list li(num,num+5); //建立內容為1 2 3 4 5的鍊錶
cout << "front獲取的元素為:"<
這裡主要提供了如下介面:
函式宣告
介面說明
push_front()
在list首元素前插入值為val的元素
pop_front()
刪除list中第乙個元素
push_back()
在list尾部插入值為val的元程式設計客棧素
pop_back()
刪除list中最後乙個元素
insert(iterator pos,const value_type& val)
在list position 位置中插入值為val的元素
erase(iterator pos)
刪除list position位置的元素
swap()
交換兩個list中的元素
list li(2,3);
li.push_front(9);
//現在list的內容為:9 2 3
list li(3,'s');
li.pop_front();
//現在list的內容為:s s
list li(3,'s');
li.push_back('a');
//現在list的內容為:s s s a
list li(4,2);
li.pop_back();
//現在的list內容為: 2 2 2
這裡博主先介紹乙個全域性函式find(),它是乙個函式模板
template
inputiterator find (inputiterator first, inputiterator last, const t& val);
即我們需要傳三個引數,前兩個是迭代器區間,後是待查詢值,其中迭代器區間是左閉右開.
list li;
li.push_bakc(1);
li.push_bakc(2);
li.push_bakc(3);
list::iterator it = li.begin();
it = find(it,it+3,2) //找到元素2的位置
li.insert(it,66);
//現在的list內容為: 1 66 2 3
list li;
li.push_bakc(1);
li.push_bakc(2);
li.push_bakc(3);
list::iterator it程式設計客棧 = li.begin();
it = find(it,it+3,2) //找到元素2的位置
li.erase(it);
//現在的list內容為: 1 3
int num1[4] = ;
int num2[5] = ;
list li1(num1,num1 + 4);
list li2(num2,num2 + 5);
li1.swap(li2); //交換鍊錶
//現在li1為: 5 4 3 2 1
//現在li2為: 1 2 3 4
本文標題: c++入門之list的使用詳解
本文位址:
STL之list函式詳解
list使用雙向鍊錶來管理元素,可以從兩端發展新元素,其內部結構如圖1所示。圖1 list的結構 list的內部結構和vetor或deque截然不同,主要的區別入下 list所提供的成員函式區別 list的好處是不論在任何位置,元素的安插和移除都只需要常數時間。如果我們要將若干元素從a容器移動b容器...
C 基礎知識之List的使用
using system using system.collections.generic using system.linq using system.text namespace uselistt static void addinsertlist 建立兩個int陣列ary1和ary2備用 in...
C STL之list的使用
相對於vector容器的連續線性空間,list是乙個雙向鍊錶,它有乙個重要性質 插入操作和刪除操作都不會造成原有的list迭代器失效,每次插入或刪除乙個元素就配置或釋放乙個元素空間。也就是說,對於任何位置的元素插入或刪除,list永遠是常數時間。常用函式 1 建構函式 list c 建立乙個空的li...