array支持的操作:
操作 | 作用 |
---|---|
array<Elem,N> c | 默认构造函数,元素进行默认初始化 |
array<Elem,N> c | 拷贝构造函数,拷贝数组每一个元素 |
array<Elem,N> c = c2 | 赋值操作符,拷贝数组每一个元素 |
array<Elem,N> c(rv) | 移动构造函数 |
array<Elem,N> c = rv | 移动赋值操作符 |
array<Elem,N> c = initlist | 用初值列初始化 |
c.empty() | 判断容器是否为空 |
c.size() | 获取元素个数 |
c.max_size() | 获取元素个数最大可能值 |
==、!=、<、>、<=、>= | 比较容器的每一个元素值 |
c.fill(val) | 用 val 对容器每个元素赋值 |
c1.swap(c2) | 交换 c1 和 c2 的每个元素值 |
swap(c1,c2) | 交换 c1 和 c2 的每个元素值 |
c[idx] | 随机访问,不检查范围 |
c.at(idx) | 随机访问,超出范围抛出 out_of_range 异常 |
c.front() | 返回第一个元素,不检查元素是否存在 |
c.back() | 返回最后一个元素,不检查元素是否存在 |
c.begin() | 指向第一个元素的随机读写迭代器 |
c.end() | 指向最后元素下一位置的随机读写迭代器 |
c.cbegin() | 指向第一个元素的随机只读迭代器 |
c.cend() | 指向最后元素下一位置的随机只读迭代器 |
c.rbegin() | 指向最后元素的反向随机读写迭代器 |
c.rend() | 指向第一个元素前一位置的反向随机读写迭代器 |
c.crbegin() | 指向最后元素的反向随机只读迭代器 |
c.crend() | 指向第一个元素前一位置的反向随机只读迭代器 |
1、array是唯一一个 “使用默认构造函数进行初始化,其元素将被默认初始化” 的容器,这对于基础类型意味着初值未定义。
array<int, 4> a; // 元素值未定义
2、为避免这种不确定的情况,尽量在定义array对象时进行显示初始化。虽然array没有为初值列提供赋值操作符,但仍可以用初值列对array进行赋值,这对于array实际是聚合初始化。初值列的长度必须小于等于array,当初值列长度小于array时,对array中剩余的元素进行值初始化,基础类型被初始化为0。
array<int ,4> a = {0, 1, 2};
3、array是用一段连续的内存来存储数据,实际就是一个静态数组。所以任何使用C数组的地方,都可以使用array。比如:
array<char, 4> a;
strcpy(a.data(), "hello world");
printf("%s\n", a.data());
4、array支持tuple接口
typedef array<int, 4> FourInt;
FourInt i = {};
tuple_size<FourInt>::value; // 容器大小
tuple_element<FourInt>::type; // 元素类型
get<1>(i); // 下标1处的元素值