一、基础介绍
1、array 容器的大小是固定的,无法动态的扩展或收缩,这也就意味着,在使用该容器的过程无法借由增加或移除元素而改变其大小,它只允许访问或者替换存储的元素。
2、array 容器以类模板的形式定义在 头文件,并位于命名空间 std 中。因此,在使用该容器之前,代码中需引入 头文件,并默认使用 std 命令空间
`namespace std{
template <typename T, size_t N>
class array;
}`
3、array容器的初始化
1)创建具有 10 个 double 类型元素的 array 容器。由于未显式指定这 10 个元素的值,因此使用这种方式创建的容器中,各个元素的值是不确定的(array 容器不会做默认初始化操作)。
`array<double, 10> values;`
2)创建 array 容器的方式,可以将所有的元素初始化为 0 或者和默认元素类型等效的值。使用该语句,容器中所有的元素都会被初始化为 0.0。
`array<double, 10> values {}`
4)在创建 array 容器的实例时,也可以像创建常规数组那样对元素进行初始化.这里只初始化了前 4 个元素,剩余的元素都会被初始化为 0.0
`array<double, 10> values {0.5,1.0,1.5,,2.0}`
二、array容器的成员函数
1、除此之外,C++ 11 标准库还新增加了 begin() 和 end() 这 2 个函数,和 array 容器包含的 begin() 和 end() 成员函数不同的是,标准库提供的这 2 个函数的操作对象,既可以是容器,还可以是普通数组。当操作对象是容器时,它和容器包含的 begin() 和 end() 成员函数的功能完全相同;如果操作对象是普通数组,则 begin() 函数返回的是指向数组第一个元素的指针,同样 end() 返回指向数组中最后一个元素之后一个位置的指针(注意不是最后一个元素)。
2、另外,在 头文件中还重载了 get() 全局函数,该重载函数的功能是访问容器中指定的元素,并返回该元素的引用。
3、正是由于 array 容器中包含了 at() 这样的成员函数,使得操作元素时比普通数组更安全。
三、举个栗子吃吃
代码演示了表 2 中一部分成员函数的用法和功能: `
#include <iostream>
#include <array>
using namespace std;
int main() {
array<int, 4> values;
//初始化 values 容器为 {0,1,2,3}
for (int i = 0; i < 4; i++) {
//返回容器中 n 位置处元素的引用,该函数自动检查 n 是否在有效的范围内,如果不是则抛出 out_of_range 异常。
values.at(i) = i;
}
// 使用 get() 重载函数输出指定位置元素
cout << get<3>(values) << endl;
//如果容器不为空,则输出容器中所有的元素
if (!values.empty()) {
for (auto val = values.begin();val < values.end(); val++) {
cout << *val << " ";
}
}
`代码中的 auto 关键字,可以使编译器自动判定变量的类型。