C++のstd::arrayクラスとは?主要メンバ関数をサンプルコード付きで解説
C++のstd::arrayクラスは、従来の生の配列と同等の高いパフォーマンスを持ちながら、自分自身のサイズ(要素数)を把握できるという大きな利点があります。C++11以降で利用できるこの固定長コンテナは、<array>ヘッダをインクルードすることで使用できます。
配列に対する操作に使われる主なメンバ関数
- size():配列のサイズ、つまり配列に含まれる要素数を返します。
- max_size():配列が保持できる最大要素数を返します。
- get(), at(), operator[]:配列の各要素へアクセスするために使用します。
- front():配列の先頭(最初)の要素を返します。
- back():配列の末尾(最後)の要素を返します。
- empty():配列が空であればtrueを、そうでなければfalseを返します。
- fill():配列全体を特定の値で埋めます。
- swap():ある配列の要素を別の配列の要素と入れ替えます。
以下は、上記で紹介したすべての操作を実装したサンプルコードです。
サンプルコード
#include<iostream>
#include<array>
using namespace std;
int main() {
array<int,4>a = {10, 20, 30, 40};
array<int,4>a1 = {50, 60, 70, 90};
cout << "配列のサイズ : ";
//size()を使って配列のサイズを取得
cout << a.size() << endl;
//配列が保持できる最大要素数
cout << "配列が保持できる最大要素数 : ";
cout << a.max_size() << endl;
//at()を使って配列の要素を出力
cout << "配列の要素(at()を使用): ";
for ( int i=0; i<4; i++)
cout << a.at(i) << " ";
cout << endl;
//get()を使って配列の要素を出力
cout << "配列の要素(get()を使用): ";
cout << get<0>(a) << " " << get<1>(a) << " "<<endl;
cout << "配列の要素(operator[]を使用): ";
for ( int i=0; i<4; i++)
cout << a[i] << " ";
cout << endl;
//配列の先頭要素を出力
cout << "配列の先頭要素 : ";
cout << a.front() << endl;
//配列の末尾要素を出力
cout << "配列の末尾要素 : ";
cout << a.back() << endl;
cout << "入れ替え前の第2配列の要素 : ";
for (int i=0; i<4; i++)
cout << a1[i] << " ";
cout << endl;
//a1の値をaと入れ替え
a.swap(a1);
//入れ替え後の第1・第2配列を出力
cout << "入れ替え後の第1配列の要素 : ";
for (int i=0; i<4; i++)
cout << a[i] << " ";
cout << endl;
cout << "入れ替え後の第2配列の要素 : ";
for (int i = 0; i<4; i++)
cout << a1[i] << " ";
cout << endl;
//配列が空かどうかを確認
a1.empty()? cout << "配列は空です":
cout << "配列は空ではありません";
cout << endl;
//配列を1で埋める
a.fill(1);
//fill操作後の配列を表示
cout << "fill操作後の配列の内容 : ";
for ( int i = 0; i<4; i++)
cout << a[i] << " ";
return 0;
}実行結果
配列のサイズ : 4 配列が保持できる最大要素数 : 4 配列の要素(at()を使用): 10 20 30 40 配列の要素(get()を使用): 10 20 配列の要素(operator[]を使用): 10 20 30 40 配列の先頭要素 : 10 配列の末尾要素 : 40 入れ替え前の第2配列の要素 : 50 60 70 90 入れ替え後の第1配列の要素 : 50 60 70 90 入れ替え後の第2配列の要素 : 10 20 30 40 配列は空ではありません fill操作後の配列の内容 : 1 1 1 1
補足:at()とoperator[]の違いについて
要素へのアクセスにはat()とoperator[]のどちらも使えますが、挙動が異なる点に注意が必要です。at()は範囲外のインデックスを指定した場合にstd::out_of_range例外を送出するため安全ですが、operator[]は範囲チェックを行わないため、範囲外アクセス時の動作は未定義になります。安全性を重視する場合はat()の使用を検討しましょう。また、std::arrayはbegin() / end()などのイテレータも備えており、STLアルゴリズムとの相性も抜群です。
-
C++のローカルクラスとは?特徴・制約と実装例をわかりやすく解説
ローカルクラスとは C++において、関数の中で宣言されたクラスは「ローカルクラス」と呼ばれます。これは、そのクラスが定義された関数の内部でのみ有効であるためです。 まず、ローカルクラスの基本的な構造を見てみましょう。 #include<iostream> using namespace std; void func() { class LocalClass { }; } int main() { return 0; } 上記の例では、関数 func() の中で LocalClass が定義されています。このように関数の内部で宣言されたクラスが、ローカルクラス
-
C#のArrayクラスとは?主なプロパティと使い方をわかりやすく解説
C#のArrayクラスとは Arrayクラスは、C#におけるすべての配列の基底クラス(基本クラス)です。このクラスはSystem名前空間で定義されており、配列を操作するためのさまざまなプロパティやメソッドが用意されています。 通常、C#で配列を作成すると、その配列は暗黙的にこのArrayクラスから派生しているため、Lengthなどの便利な機能をすぐに利用できます。 Arrayクラスの主なプロパティ一覧 以下の表は、Arrayクラスで特によく使用される代表的なプロパティをまとめたものです。 番号 プロパティと説明 1 IsFixedSize 配列が固定サイズであるかどうかを示す値を取得