C++ std::array容器的用法(附带实例)
array 容器实现的是静态数组,即内存容量固定的数组。
array 容器无法动态地进行扩展或收缩,即无法通过增加元素和删除元素改变其容量大小,只能访问或替换存储的元素。array 容器在普通数组的基础上增加了一些成员函数和全局函数,比普通数组更安全,效率也更高。
array 容器以类模板 array<T,N> 的形式定义在 <array> 头文件中,同时位于 std 命名空间中。因此,在使用该容器前需引入 <array> 头文件,并默认使用 std 命令空间:
使用 array 容器需要创建 array 对象,方法有以下两种:
1) 创建空的 array 对象,不进行初始化,语法格式如下:
例如,创建一个可容纳 10 个 double 型元素的 array 对象 a,代码如下:
2) 创建 array 对象的同时进行初始化,语法格式如下:
例如,创建一个可容纳 10 个 double 型元素的 array 对象 a,元素被初始化为 0.0,代码如下:
下面的代码中,array 对象的前 5 个元素给出了具体的数值,其余元素被初始化为 0.0:
array 容器的主要成员函数如下表所示:
例如:
array 容器无法动态地进行扩展或收缩,即无法通过增加元素和删除元素改变其容量大小,只能访问或替换存储的元素。array 容器在普通数组的基础上增加了一些成员函数和全局函数,比普通数组更安全,效率也更高。
array 容器以类模板 array<T,N> 的形式定义在 <array> 头文件中,同时位于 std 命名空间中。因此,在使用该容器前需引入 <array> 头文件,并默认使用 std 命令空间:
#include <array> using namespace std;在 array<T,N> 类模板中,T 用于指明容器中存储的具体数据类型,N 用于指明容器大小(即数组大小)。需要注意的是,N 必须是常量,不能是变量。
使用 array 容器需要创建 array 对象,方法有以下两种:
1) 创建空的 array 对象,不进行初始化,语法格式如下:
std::array<T,N> value;注意,如果前面的代码中已指定了 std 命名空间,则创建对象时可以省略“std::”。
例如,创建一个可容纳 10 个 double 型元素的 array 对象 a,代码如下:
std::array<double,10> a;
2) 创建 array 对象的同时进行初始化,语法格式如下:
std::array<T,N> value {元素1,元素2,…元素N};
例如,创建一个可容纳 10 个 double 型元素的 array 对象 a,元素被初始化为 0.0,代码如下:
std::array<double,10> a {};
下面的代码中,array 对象的前 5 个元素给出了具体的数值,其余元素被初始化为 0.0:
std::array<double,10> a {1.7,0.4,2.1,1.0,0.9};
array 容器的主要成员函数如下表所示:
函 数 | 说 明 |
---|---|
begin() | 返回指向序列第一个元素的迭代器 |
end() | 返回指向序列最后一个元素的迭代器,通常和begin()结合使用 |
rbegin() | 返回一个反向迭代器,指向序列最后一个元素 |
rend() | 返回一个反向迭代器,返回序列第一个元素 |
cbegin() | 与 begin() 类似,但增加了 const 属性,不能修改元素 |
cend() | 与 end() 类似,但增加了 const 属性,不能修改元素 |
crbegin() | 与 rbegin() 类似,但增加了 const 属性,不能修改元素 |
crend() | 与 rend() 类似,但增加了 const 属性,不能修改元素 |
size() | 返回序列大小,其值等于初始化 array 类的第二个模板参数 N |
max_size() | 返回 STLSTL 允许的最大容量,通常是一个很大的数 |
empty() | 判断序列是否为空,如果为空,返回 true。和 size()==0 条件判断的效果相同,但效率更高 |
at(n) | 返回对序列位置 n 处元素的引用。如果 n 不在有效范围内,则抛出 out_of_range 异常 |
front() | 返回对序列第一个元素的直接引用,不适用于空 array 容器 |
back() | 返回对序列最后一个元素的直接引用,不适用于空 array 容器 |
data() | 返回指向序列第一个元素的指针。利用该指针,可实现复制序列元素等功能 |
fill(val) | 将 val 赋给序列中的所有元素 |
array1.swap(array2) | 交换 array1 和 array2 序列中的所有元素(要求两者具有相同的长度和类型) |
例如:
#include <iostream> //需要引入 array 头文件 #include <array> using namespace std; int main() { std::array<int, 4> values{}; //初始化 values 容器为 {0,1,2,3} for (int i = 0; i < values.size(); i++) { values.at(i) = i; } //使用 get() 重载函数输出指定位置元素 cout << get<3>(values) << endl; //如果容器不为空,则输出容器中所有的元素 if (!values.empty()) { for (auto val = values.begin(); val < values.end(); val++) { cout << *val << " "; } } }运行这段代码,输出结果为:
3
0 1 2 3