はじめに
C++やC言語の構造体(struct
)は、関連するデータを一つにまとめるのに便利ですが、その真価は配列と組み合わせることでさらに発揮されます。
「社員」の構造体を定義した後、その構造体をデータ型とする配列を宣言すれば、「全社員のデータ」を一つの変数でスマートに管理できます。これは、データベースのテーブルのように、同じ構造を持つ複数のレコード(データの行)を扱う際に非常に強力です。
この記事では、構造体の配列を宣言し、各要素にデータを格納し、ループで処理するという、データ管理の基本となるテクニックを解説します。
構造体の配列のサンプルコード
このコードは、Student
(生徒)という構造体を定義し、3人分の生徒情報を格納する配列を作成します。その後、for
ループを使って、配列に格納された全生徒の情報を順番に表示します。
完成コード
#include <iostream>
#include <string>
// 「生徒」構造体の定義
struct Student {
int id; // 学生番号
std::string name; // 氏名
int grade; // 学年
};
int main() {
// 1. 構造体の配列を宣言 (3人分)
Student classRoster[3];
// 2. 配列の各要素(構造体)のメンバに値を代入
// 1人目のデータ (インデックス 0)
classRoster[0].id = 101;
classRoster[0].name = "鈴木 一郎";
classRoster[0].grade = 2;
// 2人目のデータ (インデックス 1)
classRoster[1].id = 102;
classRoster[1].name = "佐藤 花子";
classRoster[1].grade = 2;
// 3人目のデータ (インデックス 2)
classRoster[2].id = 103;
classRoster[2].name = "高橋 健太";
classRoster[2].grade = 1;
// 3. ループで配列の全要素を表示
std::cout << "--- 生徒名簿 ---" << std::endl;
for (int i = 0; i < 3; i++) {
std::cout << "学生番号: " << classRoster[i].id
<< ", 氏名: " << classRoster[i].name
<< ", 学年: " << classRoster[i].grade << std::endl;
}
return 0;
}
実行結果
--- 生徒名簿 ---
学生番号: 101, 氏名: 鈴木 一郎, 学年: 2
学生番号: 102, 氏名: 佐藤 花子, 学年: 2
学生番号: 103, 氏名: 高橋 健太, 学年: 1
コードの解説
Student classRoster[3];
これが、構造体の配列を宣言している部分です。
Student
: 自作した構造体(データ型)の名前です。classRoster
: 配列の変数名です。[3]
: 配列の要素数を指定しています。これにより、Student
型のデータを3つ格納できる配列が作成されます(インデックスは0
,1
,2
)。
classRoster[0].id = 101;
構造体の配列のメンバにアクセスするには、まず角括弧 []
で配列のインデックスを指定し、次にドット .
で構造体のメンバを指定します。
変数名[インデックス番号].メンバ名
この構文で、「配列の何番目の、どのメンバか」を正確に指定できます。
for (int i = 0; i < 3; i++) { ... }
構造体の配列は、for
ループと非常に相性が良いです。ループカウンタ変数 i
を配列のインデックスとして使うことで、classRoster[i]
のように、配列の全要素に対して順番に同じ処理(この場合は表示処理)を効率的に行うことができます。
まとめ
今回は、構造体の配列を使って、複数のレコードデータをまとめて管理する方法を解説しました。
構造体名 変数名[要素数];
のように、通常の配列と同じように宣言できる。- 各要素のメンバには、
変数名[インデックス].メンバ名
のようにアクセスする。 for
ループと組み合わせることで、大量のレコードデータを効率的に扱える。
この「構造体の配列」は、C++やC言語におけるデータ管理の基本形です。CSVファイルから読み込んだデータを格納したり、データベースのテーブルを模倣したりと、あらゆる場面で応用できる非常に重要なテクニックです。