添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
(C++20)
(C++20 前) (C++20 前) (C++20 前) (C++20 前) (C++20 前) (C++20)
推导指引 (C++17)
定义于头文件 <array>

std::array 是封装固定大小数组的容器。

此容器是一个聚合类型,其语义等同于保有一个 C 风格数组 T [ N ] 作为其唯一非静态数据成员的结构体。不同于 C 风格数组,它不会自动退化成 T * 。它能作为聚合类型 聚合初始化 ,只要有至多 N 个能转换成 T 的初始化器: std :: array < int , 3 > a = { 1 , 2 , 3 } ;

该结构体结合了 C 风格数组的性能、可访问性与容器的优点,比如可获取大小、支持赋值、随机访问迭代器等。

std::array 满足 容器 (Container) 可逆容器 (ReversibleContainer) 的要求,除了默认构造的 array 是非空的,以及进行交换的复杂度是线性,它 满足 连续容器 (ContiguousContainer) (C++17 起) 的要求并部分满足 序列容器 (SequenceContainer) 的要求。

当其长度为零时 array N == 0 )有特殊情况。此时, array. begin ( ) == array. end ( ) ,并拥有某个唯一值。在零长 array 上调用 front ( ) back ( ) 是未定义的。

亦可将 array 当做拥有 N 个同类型元素的元组。

迭代器非法化

按照规则,指向 array 的迭代器在 array 的生存期间决不非法化。然而要注意,在 swap 时,迭代器将继续指向同一 array 的元素,并将改变元素的值。 iterator 遗留随机访问迭代器 (LegacyRandomAccessIterator) 常量表达式迭代器 (ConstexprIterator) (C++20 起) 且为 字面类型 (LiteralType) (C++17 起) const_iterator 常随机访问迭代器 常量表达式迭代器 (ConstexprIterator) (C++20 起) 且为 字面类型 (LiteralType) (C++17 起) reverse_iterator std:: reverse_iterator < iterator > const_reverse_iterator std:: reverse_iterator < const_iterator >

(C++20 中移除) (C++20 中移除) (C++20 中移除) (C++20 中移除) (C++20 中移除) (C++20)
按照字典顺序比较 array 中的值
(函数模板) 访问 array 的一个元素
(函数模板) 特化 std::swap 算法
(函数模板)
(C++20)
从内建数组创建 std::array 对象
(函数模板) 获得 array 的大小
(类模板特化) 获得 array 元素的类型
(类模板特化)

推导指引 (C++17 起)

#include <string>
#include <iterator>
#include <iostream>
#include <algorithm>
#include <array>
int main()
    // 用聚合初始化构造
    std::array<int, 3> a1{ {1, 2, 3} }; // CWG 1270 重申前的 C++11 中要求双花括号
                                        // ( C++11 之后的版本和 C++14 起不要求)
    std::array<int, 3> a2 = {1, 2, 3};  // = 后决不要求
    std::array<std::string, 2> a3 = { std::string("a"), "b" };
    // 支持容器操作
    std::sort(a1.begin(), a1.end());
    std::reverse_copy(a2.begin(), a2.end(), 
                      std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';
    // 支持带范围 for 循环
    for(const auto& s: a3)
        std::cout << s << ' ';
3 2 1 
  
   创建 std::array 对象,从参数推导出其大小和可选的元素类型 
(函数模板)