C++ array(STL array)的用法及初始化

array<T,N> 模板定义了一种相当于标准数组的容器类型。它是一个有 N 个 T 类型元素的固定序列。除了需要指定元素的类型和个数之外,它和常规数组没有太大的差别。显然,不能增加或删除元素。

模板实例的元素被内部存储在标准数组中。和标准数组相比,array 容器的额外幵销很小,但提供了两个优点:如果使用 at(),当用一个非法的索引访问数组元素时,能够被检测到,因为容器知道它有多少个元素,这也就意味着数组容器可以作为参数传给函数,而不再需要单独去指定数组元素的个数。

使用 array 容器类型时,需要在源文件中包含头文件 array。数组容器非常好用,这里有一个示例,展示了如何创建具有 100 个 double 型元素的 array<>:
std::array<double,100> data;
如果定义了一个 array 容器,却没有为元素指定初始值,那么元素就不会被初始化;但是可以如下所示,将它们初始化为 0 或者和默认元素类型等效的值:
std::array<double, 100> data {};
使用该语句初始化后,容器中所有的元素都会变为 0.0。形参 N 必须是一个常量表达式(constant expression)并且容器中元素的个数不能变。当然,当创建 array 容器的实例时,要像创建常规数组那样,对元素进行初始化:
std::array<double, 10> values {0.5, 1.0, 1.5, 2.0};

初始化器列表中的 4 个值用于初始化前 4 个元素,其余的元素都将为 0。图 1 说明了这一点。


图 1

通过调用数组对象的成员函数 fill(),可以将所有元素设成给定值。例如:
values.fill(3.1415926);
fill() 函数将所有元素都设为传入的实参值。