STL-array和內建陣列
阿新 • • 發佈:2019-01-01
與c++語言內建的陣列一樣, array類模版支援幾乎所有內建陣列包含的特性:
標頭檔案#include"arrey"
- 順序的(sequence)
- 記憶體連續的(contiguous storage)
- 固定大小的(fixed-size)
- array::begin
- array::end
- array::cbegin
- array::cend
- array::rbegin
- array::rend
- array::crbegin
- array::crend
與其他容器的差異
該方面的差異主要體現在swap成員函式上。其他容器呼叫swap函式時,為了保證高效,實際上執行的操作相當於交換指向實際容器內容的指標。但是array的swap函式卻是進行逐成員交換
#include"iostream" #include"iterator" #include"array" using namespace std; //標準庫arrey:非類 型別容器,不提供記憶體管理,固定大小 標頭檔案"arrey" //包裝了內建陣列,固定大小容器所以不支援建構函式,與STL接軌,容器 void array_operator() { array<int, 10>a = {0,1,2,3,4,5,6,7,8,9};//定義一個數組,大小和型別 array<int, 10>b = { 0 }; array<int, 10>c; array<int, 10>d; array<int, 0>f;//支援空陣列 b = a;//支援賦值交換 c = { 1,2,3,4,5,6,7,8,9,0 };//列表賦值 cout << c.front() << " "<<c.back()<<endl; for (auto temp : b)//遍歷for範圍語句 cout << temp; c.fill(9);//.fill for (int i=0;i<c.size();i++)//for迴圈下標 cout << c[i]; d.swap(c);//陣列交換 for (auto iter = d.begin(); iter != d.end(); iter++)//迭代器 cout << *iter; for (auto iter = a.rbegin(); iter != a.rend(); iter++)//迭代器倒序 cout << *iter; } //內建陣列 使用陣列的時候編譯器會把它轉換為指標 //陣列名:指向陣列首元素的地址 //指標也是迭代器 也可以取到尾後指標 void pointer_end() { int a[10] = { 1,2,3,4,5,6,7,8,9,0 }; int *p = &a[10];//取尾後指標,不指向任意元素 for (int *b = a; b != p; b++) cout << *b; cout << endl; } //陣列不是類型別表準庫函式 begin end也是全域性函式 void begin_end() { int a[10] = { 1,2,3,4,5,6,7,8,9,0 }; int *beg = begin(a);//返回首元素地址 int *last = end(a);//返回尾後指標 while (beg != last) cout << *beg++; } //多維陣列:陣列的陣列 //多維陣列下標引用 表示式下標維度比陣列維度比較小,則表示式結果給一個內層陣列的索引 void arrey_index() { int a[2][3] = { 1,2,3,4,5,6 }; int(&b)[3] = a[1];//b為包含3個整形元素陣列的引用 int *p = a[1]; for (auto c : b) cout << c; for (int i = 0; i < 3; i++) cout << *p++; for (int i = 0; i < 3; i++) cout << *(a[1] + i); for (auto &row : a)//對多維陣列使用for範圍語句,除了最內層for其他都用引用 for (auto &col : row)//若最外層不是&則,編譯器將row轉換為一個指標int* cout << col; //若是引用row指向一個長度為3的陣列,類似於int(&b)[3] }