namespace std {
template <class T, std::size_t N>
struct array;
}
概要
arrayは固定長のオブジェクトを保持するシーケンスコンテナで、各要素は連続して格納される。従来のCスタイルの配列のパフォーマンスを保ったまま、シーケンスのサイズの取得、要素の代入のサポートなど、標準コンテナの恩恵を受ける事ができる。また、境界チェック(範囲外の要素にアクセスしようとしていないかのチェック)付きの要素アクセスもサポートしている。
arrayは、デフォルトコンストラクタで構築されたarrayオブジェクトが空でない点と、swap()の計算量が定数時間でない点を除いて、コンテナとリバーシブルコンテナの全ての要件を満たす。
テンプレートパラメータは、以下を意味する:
T: 配列の要素型N: 配列の要素数。0以上であること
メンバ関数
構築/破棄
| 名前 | 説明 | 対応バージョン |
|---|---|---|
(initializer) |
arrayの初期化 |
C++11 |
要素へのアクセス
| 名前 | 説明 | 対応バージョン |
|---|---|---|
at |
境界チェック付きの要素アクセス | C++11 |
operator[] |
境界チェック無しの要素アクセス | C++11 |
front |
先頭要素への参照を取得する | C++11 |
back |
末尾要素への参照を取得する | C++11 |
data |
コンテナ内部に保持されている生の配列へ直接アクセスする | C++11 |
イテレータ
| 名前 | 説明 | 対応バージョン |
|---|---|---|
begin |
先頭要素を指すイテレータを取得する | C++11 |
end |
末尾の1つ次の要素を指すイテレータを取得する | C++11 |
cbegin |
先頭要素を指す読み取り専用イテレータを取得する | C++11 |
cend |
末尾の次の要素を指す読み取り専用イテレータを取得する | C++11 |
rbegin |
末尾の要素を指す逆イテレータを取得する | C++11 |
rend |
先頭の1つ前の要素を指す逆イテレータを取得する | C++11 |
crbegin |
末尾の要素を指す読み取り専用逆イテレータを取得する | C++11 |
crend |
先頭の1つ前の要素を指す読み取り専用逆イテレータを取得する | C++11 |
領域
| 名前 | 説明 | 対応バージョン |
|---|---|---|
empty |
コンテナが空かどうかを判定する | C++11 |
size |
要素数を取得する | C++11 |
max_size |
格納可能な最大の要素数を取得する | C++11 |
コンテナの変更
| 名前 | 説明 | 対応バージョン |
|---|---|---|
fill |
コンテナを特定の要素で埋める | C++11 |
swap |
別のarrayオブジェクトとコンテナの中身を入れ替える |
C++11 |
メンバ型
| 名前 | 説明 | 対応バージョン |
|---|---|---|
reference |
要素の参照型 T& |
C++11 |
const_reference |
読取り専用の要素の参照型 const T& |
C++11 |
iterator |
ランダムアクセスイテレータ (実装定義) | C++11 |
const_iterator |
読取り専用のランダムアクセスイテレータ (実装定義) | C++11 |
reverse_iterator |
逆イテレータ reverse_iterator<iterator> |
C++11 |
const_reverse_iterator |
読み取り専用の逆イテレータ reverse_iterator<const_iterator> |
C++11 |
size_type |
符号なし整数型 size_t |
C++11 |
difference_type |
符号付き整数型 ptrdiff_t |
C++11 |
pointer |
要素のポインタ型 T* |
C++11 |
const_pointer |
読取り専用の要素のポインタ型 const T* |
C++11 |
value_type |
要素の型 T |
C++11 |
非メンバ関数
| 名前 | 説明 | 対応バージョン |
|---|---|---|
operator== |
等値比較 | C++11 |
operator!= |
非等値比較 | C++11 |
operator<=> |
三方比較 | C++20 |
operator< |
左辺が右辺より小さいかの判定を行う | C++11 |
operator<= |
左辺が右辺以下かの判定を行う | C++11 |
operator> |
左辺が右辺より大きいかの判定を行う | C++11 |
operator>= |
左辺が右辺以上かの判定を行う | C++11 |
swap |
2つの array オブジェクトを入れ替える |
C++11 |
配列作成関数
| 名前 | 説明 | 対応バージョン |
|---|---|---|
to_array |
組み込み一次元配列から array を作成する |
C++20 |
推論補助
| 名前 | 説明 | 対応バージョン |
|---|---|---|
(deduction_guide) |
クラステンプレートの推論補助 | C++17 |
タプルインタフェースサポート
| 名前 | 説明 | 対応バージョン |
|---|---|---|
tuple_size |
静的な要素数取得(class template) | C++11 |
tuple_element |
静的な要素の型取得(class template) | C++11 |
get |
要素を取得する(function template) | C++11 |
例
#include <iostream>
#include <array>
#include <algorithm>
int main()
{
// 3要素のint型配列を定義し、初期化子リストで初期化
std::array<int, 3> ar = {3, 1, 4};
// size()メンバ関数による要素数取得
for (std::size_t i = 0; i < ar.size(); ++i) {
++ar[i]; // operator[]で任意の要素にランダムアクセス
}
// イテレータによる要素の横断
std::for_each(ar.begin(), ar.end(), [](int x) {
std::cout << x << std::endl;
});
}
出力
4
2
5
バージョン
言語
- C++11
処理系
- Clang: ??
- GCC: 4.7.0 ✅
- Visual C++: 2008 (std::tr1) ✅, 2010 ✅, 2012 ✅
関連項目
参照
- LWG Issue 1306. pointer and
const_pointerfor<array>- C++11で、メンバ型
pointerとconst_pointerが追加された。ほかのコンテナには定義されていたが、記載が漏れていた
- C++11で、メンバ型
- LWG Issue 2310. Public exposition only member in
std::array- C++17で、
arrayが集成体であることを示す説明専用メンバ(elems)がpublicである旨が明確化され、data()の規定がaddressof(front())を用いる形に整理された
- C++17で、
- LWG Issue 2590. Aggregate initialization for
std::array- C++17で、
arrayがコピーリスト初期化に限らず集成体初期化一般で初期化できることが明確化された(std::array<int, 1> a{0};のような直接波カッコ初期化も適格)
- C++17で、