C 標準庫 順序容器

2021-10-07 14:37:34 字數 3740 閱讀 6087

二、容器的選擇

三、容器的操作

容器就是特定型別物件的集合。順序容器為程式設計師提供了控制元素儲存和訪問順序的能力,這種順序不依賴於元素的值,而是與元素加入容器時的位置相對應。相比於陣列,它可以很隨意的實現元素的新增、刪除等,我們也無需擔心記憶體分配的問題。

要使用容器,必須包含相應的標頭檔案

#include

// vector

#include

// list

#include

// deque

vector vec;

// empty vector that can hold strings

list<

int> lis;

// empty list that can hold ints

deque<

float

> dequ;

// empty deque that can holds floats

構造方法

含義c<t> c

建立乙個名為c的空容器,c是容器型別名,如vector,t是元素型別,如int,string。

c c (c2)

建立容器c2的副本c;c2和c必須具有相同的容器型別,並存放相同型別的元素。:

c c(n,m)

建立有n個初始化元素為m的容器c。只適用順序容器

c c(n, t)

使用n個為t的元素建立容器c,其中值t必須是容器型別c的元素型別的值。

c <t> c

建立容器c,容器中元素型別為t,並進行初始化

每種順序容器都提供了一組有用的型別定義以及以下操作:

型別別名

含義iterator

此容器型別的迭代器

const_iterator

可以讀取元素,但不能修改元素的迭代器型別

size_type

無符號整數型別,足夠儲存此種容器型別最大可能容器大小

difference_type

帶符號整數型別,足夠儲存兩個迭代器之間的距離

value_type

元素型別

reference

元素的左值型別,是value_type&的同義詞

const_reference

元素的常量左值型別

(1)、定義:我們可以通過下標運算子來訪問物件,但還有一種更通用的機制,就是迭代器。迭代器類似於指標,可以使用迭代器來訪問容器裡的元素,迭代器也能從乙個元素移動到另乙個元素。迭代器有有效和無效之分,有效的迭代器指向某個元素,或指向容器中尾元素的下一位置,其他的情況下就是無效的迭代器。

(2)、迭代器的使用

通過容器型別的begin和end成員使用迭代器

操作功能

c.begin()

返回乙個迭代器,指向容器c的第乙個元素

c.end()

返回乙個迭代器,指向容器c的最後乙個元素的下乙個位置

迭代器的運算子

符號作用

*iter

返回迭代器iter所指元素的引用,我們還可以對迭代器裡的值進行修改(非const迭代型別)

++iter/ - -iter

iter1==iter2/-iter1!=iter2

判斷兩個迭代器是否相等/不相等

示例1:輸出: 2 6 4 5

vector <

int> l1;

l1=;

vector <

int>

::iterator iter1=l1.

begin()

;while

(iter1!=l1.

end())

}

示例2:報錯,無法修改數值,迭代器為const_literator型別,只能讀,不能寫,輸出1,5,3,4

vector <

int> l1;

l1=;

for(vector <

int>

::const_iterator iter1=l1.

begin()

;iter1!=l1.

end();

++iter1)

}

幾個常用的成員函式

函式作用

push_back()

向容器末尾插入

swap(c1,c2)

交換c1,c2的元素,前提是型別相同,除了array容器,交換後迭代器不會失效,仍指向原來指向的元素

seq.assign(b,e)

將seq中的元素替換為迭代器b,e所表示的範圍中的元素。b,e不能指向seq中元素

seq.assign(n,t)

將seq中元素替換為n個值為t的元素

insert(iter,t)

將元素t插入到iter指向的元素之前的位置

insert(iter,b,e)

在iter指向的元素之前插入迭代器b,e所表示範圍中的元素(這個是左閉右開的區間範圍)

示例1:swap操作vector容器,交換後的迭代器還是指向原來的元素,此時輸出為:1,5,3,4

vector <

int> l1;

l1=;

vector <

int> l2=

;auto iter2=l1.

end();

for(

;iter1!=iter2;

++iter1)

示例2:swap操作array容器,交換後的迭代器指向原來的位置,但元素變了,輸出為:99,2,4,8

array <

int,

4> l1;

l1=;

array <

int,

4> l2=

;array <

int,

4>

::iterator iter1=l1.

begin()

;auto iter2=l1.

end();

swap

(l1,l2)

;for

(;iter1!=iter2;

++iter1)

insert使用後會有乙個返回值,該返回值指向第乙個新加入元素的迭代器

vector  st1=

;vector st2=

;vector

::iterator iter=st1.

begin()

;auto st3=st2.

insert

(st2.

end(

),iter,iter+2)

;//向st2某位置插入元素,並通過insert返回乙個指向第乙個新插入元素位置的迭代器

cout<<

*st3

for( vector

::iterator iters=st2.

begin()

;iters!=st2.

end();

++iters)

cout<<

*iters

參考文章

1.2.《c++ primer第五版》

C 標準庫 順序容器

容器是容納特定型別物件的集合。順序容器將單一型別元素聚集起來,並且根據位置來儲存和訪問這些元素。順序容器中元素排列順序與元素值無關,而是根據元素值新增到容器中的次序決定的。標準庫中有三種順序容器,分別是vector,list與deque。其中vector支援隨機的快速訪問,因為vector中存放資料...

C 標準庫順序容器知識點總結

c 具有內建資料結構,但為了更好的滿足開發者的需求,c 標準庫提供了多種容器來供程式設計師呼叫,本篇部落格主要是順序容器的相關知識點總結 在c 中,容器主要是一些特定型別的集合,順序容器為程式設計師提供儲存和順序訪問的能力,主要的容器型別有vector deque list forward list...

C 標準庫關聯容器

1 關聯容器定義 儲存物件集合的型別,支援通過鍵的高效訪問。和順序容器的本質差別在於 順序容器通過元素在容器中的位置順序儲存和訪問元素,而關聯容器卻是依靠鍵。map和set是兩個基本的關聯容器型別,map以鍵值對的形式組織儲存元素,而set僅儲存鍵。2,pair型別 在utility標頭檔案中定義 ...