C STL 常用容器 list

2021-09-25 10:42:07 字數 2823 閱讀 9716

鍊錶是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈結次序實現的。鍊錶由一系列結點(鍊錶中每乙個元素稱為結點)組成,結點可以在執行時動態生成。每個結點包括兩個部分:乙個是儲存資料元素的資料域,另乙個是儲存下乙個結點位址的指標域。

相較於vector的連續線性空間,list就顯得負責許多,它的好處是每次插入或者刪除乙個元素,就是配置或者釋放乙個元素的空間。因此,list對於空間的運用有絕對的精準,一點也不浪費。而且,對於任何位置的元素插入或元素的移除,list永遠是常數時間。

list和vector是兩個最常被使用的容器。

list容器是乙個雙向鍊錶。

list容器不能像vector一樣以普通指標作為迭代器,因為其節點不能保證在同一塊連續的記憶體空間上。list迭代器必須有能力指向list的節點,並有能力進行正確的遞增、遞減、取值、成員訪問操作。所謂」list正確的遞增,遞減、取值、成員取用」是指,遞增時指向下乙個節點,遞減時指向上乙個節點,取值時取的是節點的資料值,成員取用時取的是節點的成員。

由於list是乙個雙向鍊錶,迭代器必須能夠具備前移、後移的能力,所以list容器提供的是bidirectional iterators.

list有乙個重要的性質,插入操作和刪除操作都不會造成原有list迭代器的失效。這在vector是不成立的,因為vector的插入操作可能造成記憶體重新配置,導致原有的迭代器全部失效,甚至list元素的刪除,也只有被刪除的那個元素的迭代器失效,其他迭代器不受任何影響。

list容器不僅是乙個雙向鍊錶,而且還是乙個迴圈的雙向鍊錶。

#include

#include

using

namespace std;

intmain()

list<

int>

::_nodeptr node = mylist._myhead-

>_next;

for(

int i =

0; i < mylist._mysize *

2;i++)}

return0;

}

list lstt;

//list採用採用模板類實現,物件的預設構造形式:

list

(beg,end)

;//建構函式將[beg, end)區間中的元素拷貝給本身。

list

(n,elem)

;//建構函式將n個elem拷貝給本身。

list

(const list &lst)

;//拷貝建構函式。

push_back

(elem)

;//在容器尾部加入乙個元素

pop_back()

;//刪除容器中最後乙個元素

push_front

(elem)

;//在容器開頭插入乙個元素

pop_front()

;//從容器開頭移除第乙個元素

insert

(pos,elem)

;//在pos位置插elem元素的拷貝,返回新資料的位置。

insert

(pos,n,elem)

;//在pos位置插入n個elem資料,無返回值。

insert

(pos,beg,end)

;//在pos位置插入[beg,end)區間的資料,無返回值。

clear()

;//移除容器的所有資料

erase

(beg,end)

;//刪除[beg,end)區間的資料,返回下乙個資料的位置。

erase

(pos)

;//刪除pos位置的資料,返回下乙個資料的位置。

remove

(elem)

;//刪除容器中所有與elem值匹配的元素。

size()

;//返回容器中元素的個數

empty()

;//判斷容器是否為空

resize

(num)

;//重新指定容器的長度為num,

若容器變長,則以預設值填充新位置。

如果容器變短,則末尾超出容器長度的元素被刪除。

resize

(num, elem)

;//重新指定容器的長度為num,

若容器變長,則以elem值填充新位置。

如果容器變短,則末尾超出容器長度的元素被刪除。

assign

(beg, end)

;//將[beg, end)區間中的資料拷貝賦值給本身。

assign

(n, elem)

;//將n個elem拷貝賦值給本身。

list&

operator=(

const list &lst)

;//過載等號操作符

swap

(lst)

;//將lst與本身的元素互換。

front()

;//返回第乙個元素。

back()

;//返回最後乙個元素。

reverse()

;//反轉鍊錶,比如lst包含1,3,5元素,執行此方法後,lst就包含5,3,1元素。

sort()

;//list排序

C STL常用容器總結之四 鍊錶list

list是每個節點包含前驅指標 後繼指標和資料域三個部分的雙向鍊錶。list不提供隨機訪問,訪問元素需要按順序走到需訪問的元素,時間複雜度為o n 在list的任何位置上執行插入或刪除操作都非常迅速,只需在list內部調整一下指標。list不僅是乙個雙向鍊錶,而且還是乙個環狀雙向鍊錶。所以它只需要乙...

C STL常用容器總結之四 鍊錶list

list是每個節點包含前驅指標 後繼指標和資料域三個部分的雙向鍊錶。list不提供隨機訪問,訪問元素需要按順序走到需訪問的元素,時間複雜度為o n 在list的任何位置上執行插入或刪除操作都非常迅速,只需在list內部調整一下指標。list不僅是乙個雙向鍊錶,而且還是乙個環狀雙向鍊錶。所以它只需要乙...

C STL常用容器(一)

使用時需要包含標頭檔案 include 1.初始化vector vec 16 定義了已知長度16的vector vector vec 64,2 定義了初值為2長度64的vector vector vec a 用a向量來建立向量 vector vec a.begin i,a.begin j 定義了值為...