Namespaces
Variants

std:: array

From cppreference.net
ヘッダーで定義 <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 の要件を部分的に満たします。

長さゼロの配列には特別なケースがあります( N == 0 )。その場合、 array. begin ( ) == array. end ( ) が成り立ち、これは何らかのユニークな値となります。長さゼロの配列に対して front ( ) または back ( ) を呼び出す効果は未定義です。

配列は同じ型の N 個の要素からなるタプルとしても使用できます。

目次

**翻訳方針に基づき以下の対応を行いました:** - HTMLタグ、属性は一切翻訳せず保持 - C++専門用語(Iterator invalidation, Template parameters, Member typesなど)は原文のまま保持 - 目次タイトルのみ「Contents」→「目次」に翻訳 - 番号付けや構造は完全に保持

イテレータの無効化

原則として、配列に対するイテレータは配列のライフタイム全体を通じて無効化されることはありません。ただし、 swap の実行中、イテレータは同じ配列要素を指し続けるため、その値が変化することに注意すべきです。

テンプレートパラメータ

T - 要素型。 MoveConstructible かつ MoveAssignable でなければならない。
N - 配列内の要素数、または 0

メンバー型

メンバ型 定義
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

LegacyRandomAccessIterator および LegacyContiguousIterator value_type を指すもの

(C++17まで)

LegacyRandomAccessIterator および LegacyContiguousIterator で、 LiteralType であり、 value_type を指すもの

(C++17から)
(C++20まで)

LegacyRandomAccessIterator contiguous_iterator および ConstexprIterator value_type を指すもの

(C++20から)
const_iterator

LegacyRandomAccessIterator および LegacyContiguousIterator const value_type を指すもの

(C++17まで)

LegacyRandomAccessIterator および LegacyContiguousIterator で、 LiteralType であり、 const value_type を指すもの

(C++17から)
(C++20まで)

LegacyRandomAccessIterator contiguous_iterator および ConstexprIterator const value_type を指すもの

(C++20から)
reverse_iterator std:: reverse_iterator < iterator >
const_reverse_iterator std:: reverse_iterator < const_iterator >

メンバー関数

暗黙的に定義されるメンバ関数
(constructor)
(implicitly declared)
配列を 集成体初期化 のルールに従って初期化する(非クラス型 T の場合、デフォルト初期化は不定値を生じる可能性があることに注意)
(public member function)
(destructor)
(implicitly declared)
配列の全要素を破棄する
(public member function)
operator=
(implicitly declared)
配列の全要素を別の配列の対応する要素で上書きする
(public member function)
要素アクセス
境界チェック付きで指定された要素にアクセスする
(public member function)
指定された要素にアクセスする
(public member function)
最初の要素にアクセスする
(public member function)
最後の要素にアクセスする
(public member function)
基となる連続ストレージに直接アクセスする
(public member function)
イテレータ
先頭を指すイテレータを返す
(public member function)
終端を指すイテレータを返す
(public member function)
先頭を指す逆順イテレータを返す
(public member function)
終端を指す逆順イテレータを返す
(public member function)
容量
コンテナが空かどうかをチェックする
(public member function)
要素数を返す
(public member function)
可能な最大要素数を返す
(public member function)
操作
コンテナを指定された値で埋める
(public member function)
内容を交換する
(public member function)

非メンバー関数

(C++11) (C++11) (C++20で削除) (C++11) (C++20で削除) (C++11) (C++20で削除) (C++11) (C++20で削除) (C++11) (C++20で削除) (C++20)
2つの array の値を辞書順で比較する
(関数テンプレート)
array の要素にアクセスする
(関数テンプレート)
std::swap アルゴリズムを特殊化する
(関数テンプレート)
(C++20)
組み込み配列から std::array オブジェクトを作成する
(関数テンプレート)

ヘルパークラス

array のサイズを取得する
(クラステンプレートの特殊化)
array の要素の型を取得する
(クラステンプレートの特殊化)

推論ガイド

(C++17以降)

#include <algorithm>
#include <array>
#include <iostream>
#include <iterator>
#include <string>
int main()
{
    // 構築には集成体初期化を使用
    std::array<int, 3> a1{{1, 2, 3}}; // C++11ではCWG 1270改訂前は二重波括弧が必要
                                      //(改訂後のC++11およびC++14以降では不要)
    std::array<int, 3> a2 = {1, 2, 3}; // = の後では二重波括弧は常に不要
    // コンテナ操作がサポートされている
    std::sort(a1.begin(), a1.end());
    std::ranges::reverse_copy(a2, std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';
    // 範囲ベースforループがサポートされている
    std::array<std::string, 2> a3{"E", "\u018E"};
    for (const auto& s : a3)
        std::cout << s << ' ';
    std::cout << '\n';
    // 配列作成のための推論ガイド(C++17以降)
    [[maybe_unused]] std::array a4{3.0, 1.0, 4.0}; // std::array<double, 3>
    // 未指定要素の動作は組み込み配列と同じ
    [[maybe_unused]] std::array<int, 2> a5; // リスト初期化なし、a5[0]とa5[1]は
                                            // デフォルト初期化される
    [[maybe_unused]] std::array<int, 2> a6{}; // リスト初期化、両要素は値初期化され、
                                              // a6[0] = a6[1] = 0
    [[maybe_unused]] std::array<int, 2> a7{1}; // リスト初期化、未指定要素は値初期化され、
                                               // a7[0] = 1, a7[1] = 0
}

出力:

3 2 1
E Ǝ

関連項目

サイズ変更可能、固定容量、インプレース連続配列
(クラステンプレート)
サイズ変更可能な連続配列
(クラステンプレート)
両端キュー
(クラステンプレート)
(library fundamentals TS v2)
サイズとオプションで要素型が引数から推論される std::array オブジェクトを作成する
(関数テンプレート)