C++のクラス内で動的な2次元配列を作成する方法
本記事では、C++のクラス内に動的な配列を実装し、その要素を表示するシンプルなプログラムを紹介します。クラス内部に配列を持たせることで、サイズ管理や範囲外アクセスのチェックをカプセル化でき、より安全な配列操作が可能になります。ここで紹介する手法は、動的な2次元配列の実装にも応用できる基本的なテクニックです。
アルゴリズム
開始 クラス「Arr」を作成し、配列のサイズを宣言する。 クラス内でforループを使用して、すべての要素を初期化する。 すべての要素を表示する。 終了。
サンプルコード
#include <iostream>
#include <stdlib.h>
using namespace std;
const int M=7;
class Arr {
private:
int A[M];
int size;
public:
Arr(int s, int v) {
if(s>M) {
cout<<endl<<"This is beyond maximum size";
exit(1);
}
size = s;
for(int i=0;i<size;i++)
A[i] = v;
}
int& operator[](int i) {
if( (i<0) || (i >= size) ) {
cout<<endl<<"Error: Array out of bound";
exit(1);
}
return A[i];
}
};
int main() {
int i=0;
Arr a(7,0);
for(i=0;i<7;i++)
a[i] = i*10;
cout<<"Array elements are:"<<endl;
for(i=0;i<7;i++) {
int val = a[i];
cout<<val<<endl;
}
return 0;
}
実行結果
Array elements are: 0 10 20 30 40 50 60
コードのポイント
- 最大サイズの定義: 定数
M=7として配列の最大サイズを定義しており、これを超えるサイズ指定はコンストラクタ内で拒否され、エラーメッセージを表示してプログラムを終了します。 - 範囲チェック: 添字演算子
operator[]をオーバーロードすることで、a[i]という自然な記法で要素にアクセスしながら、負のインデックスや範囲外アクセスを検知して安全にエラー処理できます。 - 初期化: コンストラクタ
Arr(int s, int v)は、指定されたサイズsの配列を値vでまとめて初期化します。 - 2次元配列への拡張: この1次元版の考え方を応用し、ポインタのポインタ(
int**)やvector<vector<int>>を組み合わせることで、境界チェック機能を持つ動的2次元配列クラスへ発展させることも可能です。
-
C++のnew演算子を使って2次元配列を動的に宣言・生成する方法
動的な2次元配列とは、基本的に「配列へのポインタ」を要素とする配列(ポインタの配列)のことです。つまり、各行が独立した1次元配列としてヒープ上に確保され、それらの先頭アドレスを格納するポインタ配列によって全体が管理されます。下図は、3×4の2次元配列のイメージです。アルゴリズムC++のnew演算子で2次元配列を動的に確保する手順は以下の通りです。Begin 配列の寸法(行数・列数)を宣言する。 new を使って 2次元配列 a[][] を動的に確保する。 配列に要素を代入する。 配列の内容を出力する。 delete でメモリを解放する。 Endサンプルコ
-
C++で配列を使う方法!宣言から要素へのアクセスまで徹底解説
配列(Array)とは、同じ型の要素が連続したメモリ領域上に並んでいるデータ構造で、一意の識別子(変数名)にインデックスを組み合わせることで、個々の要素に個別にアクセスできます。C++で配列を使用するには、まず配列を宣言する必要があります。 int arr[10]; このコードは、int型の要素を10個格納できる配列を宣言しています。これにより、連続したメモリ領域に10個の整数を保存することが可能になります。 配列の要素へアクセスする方法 配列の特定の要素を参照するには、配列アクセス演算子「[]」を使い、アクセスしたい要素のインデックスを指定します。ここで重要なのは、C++の配列のインデックス