C 入門之list的使用詳解

2022-09-29 12:09:11 字數 3471 閱讀 4099

目錄

今天我們終於來到了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...