array是一個固定大小的順序容器,不能動態改變大小,array內的元素在內存中以嚴格的線性順序存儲
與普通數組聲明存儲空間大小[]的方式是一樣有效的,只是加入了一些成員函數和全局函數[get (array)、operators (array)],以便當作標准容器使用
零大小的array是有效的,但是不可以被成員函數front、back、data間接引用
array的swap是一個線性操作交換所有的元素,通常是非常低效的
與普通數組聲明存儲空間大小[]的方式是一樣有效的,只是加入了一些成員函數和全局函數[get (array)、operators (array)],以便當作標准容器使用
零大小的array是有效的,但是不可以被成員函數front、back、data間接引用
array的swap是一個線性操作交換所有的元素,通常是非常低效的
Constructor: 1.template < class T, size_t N > class array;
舉例:
array<int,10> iArray={1,2,3,4,5,6,7,8,9,10};
Member functions:
back
data//返回指向array中第一個元素的指針
swap
Output:
first element in myarray: 30
first element in mytuple: 10
Output:
a and b are equal
b and c are not equal
b is less than c
c is greater than b
a is less than or equal to b
a is greater than or equal to b
Iterators
| begin | Return iterator to beginning |
| end | Return iterator to end |
| rbegin | Return reverse iterator to reverse beginning |
| rend | Return reverse iterator to reverse end |
| cbegin | Return const_iterator to beginning |
| cend | Return const_iterator to end |
| crbegin | Return const_reverse_iterator to reverse beginning |
| crend | Return const_reverse_iterator to reverse end |
std::array<int,5> arr = { 2, 16, 77, 34, 50 }; std::cout << "arr contains:"; for ( auto it = arr.cbegin(); it != arr.cend(); ++it )
{
*it = 34; //error can't modify *it
arr.begin(); //point to array first element
arr.front(); //return the first element
arr.back(); //return the end element
std::cout << *it << std::endl;
}
Capacity
| empty | Test whether list is empty |
| size | Return size |
| max_size | Return maximum size |
Element access
| operator[] | Access element |
| at | Access element |
| front | Access first element |
| back | Access last element |
| data | Get pointer to first data |
注意:使用at程序崩潰時不會顯示堆棧信息,盡量使用[]去array的值
const char* cstr = "Test string"; std::array<char,12> charray; std::memcpy (charray.data(),cstr,12); std::cout << charray.data() << std::endl;//如果是char類型則打印值 Test string //如果array中保存的是int cout << iArray.data() << endl;//兩者等效,等於打印出第一個元素的地址 cout << &charray << endl; array<string,5> sArray={"hello","c++","I"}; for (auto it = sArray.cbegin(); it != sArray.cend(); ++it) { cout << *it << '\t';//打印出hello c++ I } cout << sArray.data() << endl;//打印地址
Modifiers
| fill | Fill array with value |
| swap | Swap content |
fill
std::array<int, 5> arr; arr.fill(34); for (auto it = arr.begin(); it != arr.end(); it++) { std::cout << " " << *it; } arr.assign(5); for (auto it = arr.begin(); it != arr.end(); it++) { std::cout << " " << *it; }
OutPut:
34 34 34 34 34 5 5 5 5 5
Global functions
| get(array) | Get element (tuple interface) (function template ) |
| operators (array) | Global relational operator functions for array |
get(array)//Returns a reference to the Ith element of array arr.
函數原型: 1.template <size_t I, class T, size_t N> T& get ( array<T,N>& arr ) noexcept; 2.template <size_t I, class T, size_t N> T&& get ( array<T,N>&& arr ) noexcept; 3.template <size_t I, class T, size_t N> const T& get ( const array<T,N>& arr ) noexcept;
first element in myarray: 30
first element in mytuple: 10
operators(array)
模板原型如下: 1.template <class T, size_T N> bool operator== ( const array<T,N>& lhs, const array<T,N>& rhs ); 2.template <class T, size_T N> bool operator!= ( const array<T,N>& lhs, const array<T,N>& rhs ); 3.template <class T, size_T N> bool operator< ( const array<T,N>& lhs, const array<T,N>& rhs ); 4template <class T, size_T N> bool operator> ( const array<T,N>& lhs, const array<T,N>& rhs ); 5.template <class T, size_T N> bool operator<= ( const array<T,N>& lhs, const array<T,N>& rhs ); 6.template <class T, size_T N> bool operator>= ( const array<T,N>& lhs, const array<T,N>& rhs );
std::array<int,5> a = {10, 20, 30, 40, 50}; std::array<int,5> b = {10, 20, 30, 40, 50}; std::array<int,5> c = {50, 40, 30, 20, 10}; if (a==b) std::cout << "a and b are equal\n"; if (b!=c) std::cout << "b and c are not equal\n"; if (b<c) std::cout << "b is less than c\n"; if (c>b) std::cout << "c is greater than b\n"; if (a<=b) std::cout << "a is less than or equal to b\n"; if (a>=b) std::cout << "a is greater than or equal to b\n";
a and b are equal
b and c are not equal
b is less than c
c is greater than b
a is less than or equal to b
a is greater than or equal to b
