std::array
| ヘッダ <array> で定義
|
||
template< class T, std::size_t N > struct array; |
(C++11以上) | |
std::array は固定サイズの配列をカプセル化するコンテナです。
このコンテナは C スタイルの配列 T[N] を唯一の非 static データメンバとして保持する構造体と同じセマンティクスを持つ集成体型です。 C スタイルの配列と異なり、自動的に T* に格下げしません。 集成体型と同様に、 T に変換可能な最大 N 個の初期化子を指定した集成体初期化で初期化することができます (例: std::array<int, 3> a = {1,2,3};)。
この構造体は C スタイルの配列の性能やアクセス性と標準コンテナの利点 (自身のサイズの把握、代入のサポート、ランダムアクセスイテレータなど) を併せ持ちます。
std::array は、 Container および ReversibleContainer の要件をデフォルト構築された array が空でないことと swap の計算量が線形時間であることを除いて満たし、 ContiguousContainer の要件を満たし、 (C++17以上) SequenceContainer の要件を部分的に満たします。
array には長さゼロ (N == 0) のための特別なケースがあります。 このケースでは、 array.begin() == array.end() となり、その値は何らかの一意な値になります。 サイズ0の array に対する front() と back() の呼び出しの効果は未定義です。
array は同じ型の N 個の要素を持つタプルとしても使うことができます。
イテレータの無効化
ルールとして、 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
|
LiteralType である (C++17以上) LegacyRandomAccessIterator かつ ConstexprIterator (C++20以上) |
const_iterator
|
LiteralTypeである (C++17以上) const な LegacyRandomAccessIterator かつ ConstexprIterator (C++20以上) |
reverse_iterator
|
std::reverse_iterator<iterator>
|
const_reverse_iterator
|
std::reverse_iterator<const_iterator>
|
メンバ関数
暗黙に定義されたメンバ関数 | |
コンストラクタ (暗黙に宣言) |
集成体初期化のルールに従って array を初期化します (非クラス型の T に対するデフォルト初期化は不定値となることに注意してください) (パブリックメンバ関数) |
デストラクタ (暗黙に宣言) |
array の要素をすべて破棄します (パブリックメンバ関数) |
operator= (暗黙に宣言) |
array のすべての要素を別の array の対応する要素で上書きします (パブリックメンバ関数) |
要素アクセス | |
| 境界チェック付きで指定された要素にアクセスします (パブリックメンバ関数) | |
| 指定された要素にアクセスします (パブリックメンバ関数) | |
| 最初の要素にアクセスします (パブリックメンバ関数) | |
| 最後の要素にアクセスします (パブリックメンバ関数) | |
| ベースとなる配列への直接アクセス (パブリックメンバ関数) | |
イテレータ | |
| 先頭を指すイテレータを返します (パブリックメンバ関数) | |
| 終端を指すイテレータを返します (パブリックメンバ関数) | |
| 先頭を指す逆イテレータを返します (パブリックメンバ関数) | |
| 終端を指す逆イテレータを返します (パブリックメンバ関数) | |
容量 | |
| コンテナが空かどうか調べます (パブリックメンバ関数) | |
| 要素数を返します (パブリックメンバ関数) | |
| 可能な最大の要素数を返します (パブリックメンバ関数) | |
操作 | |
| 指定された値でコンテナを埋めます (パブリックメンバ関数) | |
(C++11) |
内容を入れ替えます (パブリックメンバ関数) |
非メンバ関数
(C++20で削除)(C++20で削除)(C++20で削除)(C++20で削除)(C++20で削除)(C++20) |
array 内の値を辞書的に比較します (関数テンプレート) |
array の要素にアクセスします (関数テンプレート) | |
(C++11) |
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
a b
関連項目
| サイズと要素型を引数から推定した std::array オブジェクトを作成します (関数テンプレート) |