std:: array
|
ヘッダーで定義
<array>
|
||
|
template
<
class
T,
|
(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
個の要素からなるタプルとしても使用できます。
目次 |
イテレータの無効化
原則として、配列に対するイテレータは配列のライフタイム全体を通じて無効化されることはありません。ただし、 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 > |
メンバー関数
暗黙的に定義されるメンバ関数 |
|
|
(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
の値を辞書順で比較する
(関数テンプレート) |
|
(C++11)
|
array
の要素にアクセスする
(関数テンプレート) |
|
(C++11)
|
std::swap
アルゴリズムを特殊化する
(関数テンプレート) |
|
(C++20)
|
組み込み配列から
std::array
オブジェクトを作成する
(関数テンプレート) |
ヘルパークラス
|
(C++11)
|
array
のサイズを取得する
(クラステンプレートの特殊化) |
|
(C++11)
|
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 Ǝ
関連項目
|
(C++26)
|
サイズ変更可能、固定容量、インプレース連続配列
(クラステンプレート) |
|
サイズ変更可能な連続配列
(クラステンプレート) |
|
|
両端キュー
(クラステンプレート) |
|
|
(library fundamentals TS v2)
|
サイズとオプションで要素型が引数から推論される
std::array
オブジェクトを作成する
(関数テンプレート) |