首页 > 编程笔记 > C++笔记 阅读:102

C++ std::array容器的用法(附带实例)

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 容器的主要成员函数如下表所示:

表: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

相关文章