array是一个固定大小的顺序容器,不能动态改变大小,array内的元素在内存中以严格的线性顺序存储 与普通数组声明存储空间大小[]的方式是一样有效的,只是加入了一些成员函数和全局函数[get (array)、operators (array)],以便当作标准容器使用 零大小的array是有效的,但是不可以被成员函数front、back、data间接引用 array的swap是一个线性操作交换所有的元素,通常是非常低效的
Constructor:1.template < class T, size_t N > class array; 举例: arrayiArray={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::arrayarr = { 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::arraycharray; 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 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::arrayarr;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.templateT& get ( array & arr ) noexcept;2.template T&& get ( array && arr ) noexcept;3.template const T& get ( const array & arr ) noexcept;
operators(array)
模板原型如下:1.templatebool operator== ( const array & lhs, const array & rhs );2.template bool operator!= ( const array & lhs, const array & rhs );3.template bool operator< ( const array & lhs, const array & rhs );4template bool operator> ( const array & lhs, const array & rhs );5.template bool operator<= ( const array & lhs, const array & rhs );6.template bool operator>= ( const array & lhs, const array & rhs );
std::arraya = { 10, 20, 30, 40, 50}; std::array b = { 10, 20, 30, 40, 50}; std::array 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 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";