std::array

来自cppreference.com
< cpp‎ | container
定义于头文件 <array>
template<

    class T,
    std::size_t N

> struct array;
(C++11 起)

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 个同类型元素的 tuple 。

目录

[编辑] 迭代器非法化

作为规则,指向 array 的迭代器在 array 的生存期间决不非法化。然而要注意,在 swap 时,迭代器将继续指向同一 array 的元素,并将改变元素的值。

[编辑] 成员类型

成员类型 定义
value_type T [编辑]
size_type std::size_t [编辑]
difference_type std::ptrdiff_t [编辑]
reference value_type& [编辑]
const_reference const value_type& [编辑]
pointer value_type*[编辑]
const_pointer const value_type*[编辑]
iterator 随机访问迭代器RandomAccessIterator字面类型LiteralType (C++17 起)[编辑]
const_iterator 常随机访问迭代器字面类型LiteralType (C++17 起) [编辑]
reverse_iterator std::reverse_iterator<iterator> [编辑]
const_reverse_iterator std::reverse_iterator<const_iterator> [编辑]

[编辑] 成员函数

隐式定义的成员函数
(构造函数)
(隐式声明)
遵循聚合初始化的规则初始化 array (注意默认初始化可以导致非类的 T 的不确定值)
(公开成员函数)
(析构函数)
(隐式声明)
销毁 array 的每个元素
(公开成员函数)
operator=
(隐式声明)
以来自另一 array 的每个元素重写 array 的对应元素
(公开成员函数)
元素访问
访问指定的元素,同时进行越界检查
(公开成员函数) [编辑]
访问指定的元素
(公开成员函数) [编辑]
访问第一个元素
(公开成员函数) [编辑]
访问最后一个元素
(公开成员函数) [编辑]
返回指向内存中数组第一个元素的指针
(公开成员函数) [编辑]
迭代器
返回指向容器第一个元素的迭代器
(公开成员函数) [编辑]
返回指向容器尾端的迭代器
(公开成员函数) [编辑]
返回一个指向容器最后一个元素的反向迭代器
(公开成员函数) [编辑]
返回一个指向容器前端的反向迭代器
(公开成员函数) [编辑]
容量
检查容器是否为空
(公开成员函数) [编辑]
返回容纳的元素数
(公开成员函数) [编辑]
返回可容纳的最大元素数
(公开成员函数) [编辑]
操作
使用指定的值填充容器
原文:
fill the container with specified value
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

(公开成员函数) [编辑]
交换array的内容
(公开成员函数) [编辑]

[编辑] 非成员函数

根据字典顺序比较 array 中的值
(函数模板) [编辑]
访问array的一个元素
(函数模板) [编辑]
特化 std::swap 算法
(函数模板) [编辑]

[编辑] 帮助类

获得array的大小
(类模板特化) [编辑]
获得array元素的类型
(类模板特化) [编辑]

[编辑] 推导指引(C++17 起)

[编辑] 示例

#include <string>
#include <iterator>
#include <iostream>
#include <algorithm>
#include <array>
 
int main()
{
    // 用聚合初始化构造
    std::array<int, 3> a1{ {1, 2, 3} }; // 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 
a b

[编辑] 参阅

创建 std::array 对象,从参数推导出其大小和可选的元素类型
(函数模板) [编辑]
从内建数组创建 std::array 对象
(函数模板) [编辑]