STL容器之list鍊錶使用

2021-10-09 09:25:22 字數 2400 閱讀 5931

目錄

一、list的概念理解

二、建構函式

三、元素插入和刪除

四、資料訪問

五、大小操作

六、反轉和排序

list鍊錶是將資料元素進行鏈式儲存,在物理單元上是非連續的結構,與vector動態陣列不同,陣列是一片連續的記憶體空間,list鍊錶是由一系列節點組成,而節點是由乙個儲存資料元素的資料域和乙個儲存上乙個節點位址以及下乙個節點位址的指標域組成,資料元素的邏輯順序是通過鍊錶的每一節點的元素指標鏈結實現的,在stl中的list鍊錶是乙個雙向迴圈的鍊錶。

1、鍊錶中每個節點都由資料元素和prev、next指標組成;

3、當當前節點是首節點時,可以讓prev指標為空或者指向最後乙個節點的位址;

4、當當前節點時末節點時,可以讓next指標為空或者指向首節點的位址;

這就是list雙向迴圈鍊錶,迭代器不支援隨機訪問,只允許迭代器自加或者自減的操作,訪問弱於vector等容器。

list建構函式與vector、deque動態陣列一樣,差別不大。

(1)listlist_test:預設建構函式,也叫無參建構函式;

(2)listlist_test(begin, end):帶有迭代器區間的建構函式,區間是[begin,end);

(3)listlist_test(n,element):n個相同元素element的建構函式;

(4)listlist_test(const list& list):拷貝建構函式。

//! 建構函式

void constructortest()

(1)push_front( element ):在鍊錶頭部加入乙個元素element;

(2)pop_front():移除鍊錶頭部第乙個元素;

(3)push_back( element ):在鍊錶尾部加入乙個元素element;

(4)pop_back():移除鍊錶尾部最後乙個元素;

(5)insert( pos,element ):在鍊錶的pos位置(迭代器)插入乙個元素element,返回值為新元素的pos位置

(6)insert( pos,n,element ):在鍊錶的pos位置(迭代器)插入n個相同的元素element,無返回值

(7)insert( pos, begin, end ):在鍊錶的pos位置(迭代器)插入乙個鍊錶的迭代器區間[begin,end),無返回值

(10)clear():清空鍊錶的元素;

(11)remove( element ):刪除鍊錶中所有與element相匹配的元素,該不是迭代器,只是元素的值本身。

//! 插入和刪除

void insertdelete()

(1)front():返回鍊錶的第乙個元素;

(2)back():返回鍊錶的最後乙個元素;

值得注意的是在stl中,list是不支援[ ]和at()的方式去訪問鍊錶中的元素,list的本質是雙向迴圈鍊錶,並非一段連續的線性儲存空間儲存資料

// 資料訪問

void dataaccess()

(1)empty():判斷list容器是否為空;

(2)size():返回元素個數;

(3)resize( size ):重新指定容器大小為size;

(4)resize( size, elem ):重新指定容器大小為size,並以elem填充新增資料元素。

// 大小操作

void sizetest()

}

(1)reverse():list容器元素反轉,即元素位置收尾調換,該介面為list的成員函式;

(2)sort():list容器元素排序,預設排序順序是公升序;

(3)sort<_pr2>( _pr2 _pred ): list成員函式sort的過載函式,引數可以是乙個自定義函式或者仿函式,除預設排序外,其他自定義排序需要利用該函式進行實現,很奇怪的是我在qt環境編譯時是沒有該介面的,不知道是不是每個編譯器廠商的編譯器標準不一樣。

// 反轉和排序

void reversesorttest()

在vs中試了下自定義的降序操作,是可以的行得通的:

bool mysort(int value1, int value2)

void sorttest()

STL之list雙向鍊錶容器入門

stl泛型程式設計的功能是很強大的,list就是其中容器之一。今天上午用了近3個小時的時間,算是把list的簡單操作掌握了,其中用來實現list的 我也儲存下來了,供想學list容器的童鞋,不必再想我一樣苦逼的巧一上午 了!在此獻上 一枚 include include include using ...

STL序列式容器之list(雙向鍊錶)

和vector相比,list的實現更加複雜,因為它並不要求空間是連續儲存的,它的好處是已知位置的元素插入和移除都是常數時間。1 list的節點 由於list是雙向鍊錶,因此list的節點需要指向前驅節點的指標以及指向後繼節點的指標。2 list的迭代器 由於空間並不連續,因此list無法支援隨機訪問...

STL(八)list雙向鍊錶容器

list是雙向鍊錶的乙個泛化容器,實現了reversible container,front insertion sequence and back insertion sequence等概念的介面規範 不同於採用線性表順序儲存結構的vector and deque容器,list雙向鍊錶中任一位置的...