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使我們自己給...