std::array
| ヘッダー <array> で定義 |
||
| template< class T, |
(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
|
| ||||||
const_iterator
|
| ||||||
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 の値を辞書式順序で比較する(関数テンプレート) |
| (C++11) |
array の要素にアクセスする(関数テンプレート) |
| (C++11) |
std::swap アルゴリズムを特殊化する (関数テンプレート) |
| (C++20) |
組み込み配列から std::array オブジェクトを作成する(関数テンプレート) |
[編集] ヘルパークラス
| (C++11) |
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 Ǝ
[編集] 関連項目
| (C++26) |
リサイズ可能、固定容量、インプレースの連続配列 (クラステンプレート) |
| リサイズ可能な連続配列 (クラステンプレート) | |
| 両端キュー (クラステンプレート) | |
| (Library Fundamentals TS v2) |
引数からサイズと、任意で要素型が推論される std::array オブジェクトを作成する (関数テンプレート) |