名前空間
変種
操作

std::array

From cppreference.com
< cpp‎ | container
 
 
 
 
ヘッダー <array> で定義
template<

    class T,
    std::size_t N

> struct array;
(C++11以降)

std::array は、固定長配列をカプセル化するコンテナです。

このコンテナは、非静的データメンバとしてC スタイルの配列 T[N] のみを保持する構造体と同じセマンティクスを持つ集成体型です。C スタイルの配列とは異なり、自動的に T* に縮退することはありません。集成体型であるため、T に変換可能な初期化子を最大 N 個与えることで集成体初期化が可能です:std::array<int, 3> a = {1, 2, 3};

この構造体は、C スタイルの配列のパフォーマンスとアクセシビリティを、自身のサイズを知っている、代入をサポートする、ランダムアクセスイテレータを持つ、などの標準コンテナの利点と組み合わせています。

std::array は、コンテナ (Container)リバーシブルコンテナ (ReversibleContainer) の要件を満たしますが、デフォルト構築された配列が空でないこと、および swap の計算量が線形である点が例外です。連続コンテナ (ContiguousContainer) の要件を満たし、(C++17 以降)シーケンスコンテナ (SequenceContainer) の要件を部分的に満たします。

長さゼロの配列 (N == 0) には特別なケースがあります。その場合、array.begin() == array.end() となり、これは一意な値です。サイズゼロの配列に対して front() または back() を呼び出す効果は未定義です。

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

目次

[編集] イテレータの無効化

原則として、配列のイテレータは、その配列の生存期間を通じて無効になることはありません。ただし、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

value_type への LegacyRandomAccessIterator および LegacyContiguousIterator

(C++17まで)

value_type への リテラル型 (LiteralType) である LegacyRandomAccessIterator および LegacyContiguousIterator

(C++17以降)
(C++20まで)

value_type への LegacyRandomAccessIterator, contiguous_iterator, および ConstexprIterator

(C++20以降)
[編集]
const_iterator

const value_type への LegacyRandomAccessIterator および LegacyContiguousIterator

(C++17まで)

const value_type への リテラル型 (LiteralType) である LegacyRandomAccessIterator および LegacyContiguousIterator

(C++17以降)
(C++20まで)

const value_type への LegacyRandomAccessIterator, contiguous_iterator, および ConstexprIterator

(C++20以降)
[編集]
reverse_iterator std::reverse_iterator<iterator>[編集]
const_reverse_iterator std::reverse_iterator<const_iterator>[編集]

[編集] メンバ関数

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

[編集] 非メンバ関数

(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()
{
    // Construction uses aggregate initialization
    std::array<int, 3> a1{{1, 2, 3}}; // Double-braces required in C++11 prior to
                                      // the CWG 1270 revision (not needed in C++11
                                      // after the revision and in C++14 and beyond)
 
    std::array<int, 3> a2 = {1, 2, 3}; // Double braces never required after =
 
    // Container operations are supported
    std::sort(a1.begin(), a1.end());
    std::ranges::reverse_copy(a2, std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';
 
    // Ranged for loop is supported
    std::array<std::string, 2> a3{"E", "\u018E"};
    for (const auto& s : a3)
        std::cout << s << ' ';
    std::cout << '\n';
 
    // Deduction guide for array creation (since C++17)
    [[maybe_unused]] std::array a4{3.0, 1.0, 4.0}; // std::array<double, 3>
 
    // Behavior of unspecified elements is the same as with built-in arrays
    [[maybe_unused]] std::array<int, 2> a5; // No list init, a5[0] and a5[1]
                                            // are default initialized
    [[maybe_unused]] std::array<int, 2> a6{}; // List init, both elements are value
                                              // initialized, a6[0] = a6[1] = 0
    [[maybe_unused]] std::array<int, 2> a7{1}; // List init, unspecified element is value
                                               // initialized, a7[0] = 1, a7[1] = 0
}

出力

3 2 1
E Ǝ

[編集] 関連項目

リサイズ可能、固定容量、インプレースの連続配列
(クラステンプレート) [編集]
リサイズ可能な連続配列
(クラステンプレート) [編集]
両端キュー
(クラステンプレート) [編集]
(Library Fundamentals TS v2)
引数からサイズと、任意で要素型が推論される std::array オブジェクトを作成する
(関数テンプレート) [編集]
English 日本語 中文(简体) 中文(繁體)