C 11 array使用詳解

2021-06-23 06:54:23 字數 2307 閱讀 9924

c++11中引入了array容器,array是序列容器的一種。array很類似於一般的陣列,例如,array在棧上分配連續的記憶體來儲存元素,並且array的大小是不可以改變的,這也就是說,可以修改array中元素的值,但不能向array中插入和刪除元素。

array具有序列容器的特點,同時又具有一般陣列的特點,實際上,在程式中需要使用陣列的地方,都可以使用array來代替,使用array更為安全,除了具有一般陣列的靈活性,還具有與一般陣列相近的效能優勢。

array是具有固定大小的容器,這就是說,在定義array物件時就需要顯式指定其所能容納元素的數目,並且這個數目一經指定就不可再改變了。其它的序列容器,例如,新建立的vector物件並不包含任何元素,而array在建立時就擁有固定數目的元素,並且這些元素將會進行初始化。在建立array時使用初始化列表作為array的初始值:

#include using std::array;

int main()

; // arr1包含:1 2 3 4 5

arrayarr2 = ; // arr2包含:0 0 0 0 0

return 0;

}

如果array中包含的是基本型別,並且沒有提供初始化值,則array中元素的值是未定義的:

arrayarr;         // arr中元素的值是未定義的
使用array的乙個好處就是

可以將乙個相同型別的array物件賦值給另乙個物件,array中的元素將會依次進行複製,因此,在賦值之後,兩個array具有相同的元素,但需要保證兩個array具有相同的元素型別以及大小。但對於一般陣列,則不能這樣做:

arrayarr1 = ;

arrayarr2 = ;

arrayarr3 = arr1; // arr3 包含:1 2 3 4 5

arr3 = arr2; // arr3 包含:5 4 3 2 1

注意,僅能將乙個相同型別的array賦值給另乙個array,但不能使用初始化列表來賦值array物件:

arrayarr1 = ;

// error: arr1 = ; 不能使用初始化列表來向array賦值

可以使用array的成員函式fill()來將array中的元素賦為相同的值:

arrayarr;

arr.fill( 9 ); // arr包含: 9 9 9 9 9

對於其它的序列容器,比如vector,可以使用swap()來交換兩個vector,此時,使用swap()具有常量時間複雜度,顯得特別高效,這是因為vector中擁有指向動態分配記憶體的指標,因此,使用swap()交換兩個vector僅需要交換其內部指向動態記憶體的指標即可。同樣,可以使用swap()來交換兩個array

,但由於array在棧上為元素分配記憶體,array內部並沒有包含指向動態記憶體的指標,因此,使用swap()來交換兩個array具有線性時間複雜度,因為交換兩個array將會涉及到元素的逐一複製。swap有兩種等價的形式,一種作為泛型的演算法,另一種則作為array的成員函式:

arrayarr1 = ;

arrayarr2 = ;

swap( arr1, arr2 );

arr1.swap( arr2 ); // 等價於: swap( arr1, arr2 );

array中具有成員函式size()用來獲得array中元素的數目:

arrayarr = ;

for ( int i = 0; i != arr.size() ; ++i )

cout << endl;

array是序列容器的一種,可以使用迭代器的方式來歷遍array,也可以使用for-each迴圈來歷遍array:

arrayarr = ;

for( auto elem : arr )

cout << elem << " ";

cout << endl;

for( auto iter = arr.begin(); iter != arr.end(); ++iter )

cout << *iter << " ";

cout << endl;

C 11 新增容器 array

array 容器是 c 11 標準中新增的序列容器,簡單地理解,它就是在 c 普通陣列的基礎上,新增了一些成員函式和全域性函式。array是將元素置於乙個固定陣列中加以管理的容器。array可以隨機訪問元素,支援索引值直接訪問,用操作符或at 方法對元素進行操作,也可以使用迭代器訪問 不支援動態的新...

c 11 atomic的使用詳解

std atomic flag是乙個原子的布林型別,可支援兩種原子操作 std atomic flag可用於多執行緒之間的同步操作,類似於lin程式設計客棧ux中的訊號量。使用atomic flag可實現mutex.include include include include include st...

C語言 array陣列的用法詳解

目錄 陣列是一種相同型別元素的集合 include include int main 不完全初始化,剩下的元素預設初始化0.char arr2 5 初始化 char arr 5 不完全初始化,剩下元素預設初始化0.初始化 char arr 5 ab 這是可行的,因為隱藏乙個 0 後面的0使我們自己給...