1. 原型
C11提供
template < class T, size_t N > class array; T: 元素类型,以 array::value_type 作为别名使用;
N: array中元素大小;
- 固定size的序列容器;
- 初始化时, array对象不保存任何数据,除了编译时期的行为对“元素”参数的编译器初始化值
- 和普通的数组一样,从[]访问
- array仅仅为数组封装了一层成员函数和全局函数,以作为标准容器使用
- array固定容器大小,不能扩展容量;
- 0大小的array是有效的,但是不能访问数据。
- STL 中的swap操作是非常低效率的操作;
- array容器能够作为tuple对象(元组对象)使用。 头文件<array>中重载了get函数来获取array中的元素值。
使用头文件:
#include <array>
1.1 成员类型:
array中的成员类型作为一些参数、或者返回值类型的别名使用,下面的是别面以及定义:
- value_type:模板参数T
- reference: value_type&
- const_reference: const value_type&;
- pointer: value_type*
- const_pointer: const value_type*;
- iterator: 随机指向value_type的迭代器
- const_iterator: 指向const value_type类型的迭代器
- reverse_iterator:
- const_reverse_iterator:
- size_type: size_t(无符号整数 unsign int)
- difference_type: ptrdiff_t(符号整形 int)
1.2 成员函数
(1)Iterators
Array::begin:
Array::end:
Array::rbegin:
Array::rend;
Array::cbegin
Array::cend;
Array::crbegin
Array::crend;
(2)Capacity
Array:: size(): 元素数量
Array::max_size():最大容量
Array::expty(): 测试是否为空
(3)Element access
Array:: operator[]:
- 返回参数n位置的reference,注意,第一个元素位置为0;
- 与 成员函数at()具有相同的行为, 但是array::at()是会检查参数n是否越界,以及如果越界则抛出异常信号
- 如果是const的array,则返回const_reference,否则返回reference
- 注意:refenerence的样式是类型array内的别名定义。
reference at ( size_type n );
const_reference at ( size_type n ) const;
- 返回参数n位置的reference。自定检测n是否位于有效的范围内。并抛出out_of_rance 异常。如果n 大于size或者等于size
Array::front();
- 返回第一个元素的reference
- Calling this function on an empty container causes undefined behavior.
Array::back();
- 返回最后一个元素的reference, 不像array::end()返回的是iterator
- Calling this function on an empty container causes undefined behavior.
Array::data();
- 返回pointer类型指向第一个元素;
- 因为array类型是连续内存分配,因此可以对pointer进行任何偏置访问相应位置数据;
(4)Modifiers
void Array::fill(const value_type& val):
- 对数组中的所有元素设置参数值
void Array::swap(array& x):
- 交换内容,两个对象具有相同的size;
- 调用之后,两个对象互相交换内容;
1.3 非成员函数重载
get(array)
返回array 中的第i个元素属性引用。
relational operators(array)
1.4 非成员 类的声明
(1)tuple_element<array>
(2)tuple_size<array>