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处的元素值
本文详细介绍了C++ STL中的array容器,包括其支持的各种操作、初始化方式、内存存储特点及与其他容器的区别。同时,还提供了如何使用array容器的具体实例。
452

被折叠的 条评论
为什么被折叠?



