C++ 多次元配列
多次元配列
多次元配列は配列の配列です。
多次元配列を宣言するには、変数の型を定義し、配列の名前を指定し、その後にメイン配列の要素数を指定する角括弧を指定し、その後にサブ配列の要素数を示す別の角括弧セットを指定します。
string letters[2][4];
通常の配列と同様に、配列リテラル (中括弧内のコンマ区切りリスト) を使用して値を挿入できます。多次元配列では、配列リテラルの各要素は別の配列リテラルです。
string letters[2][4] = {
{ "A", "B", "C", "D" },
{ "E", "F", "G", "H" }
};
配列宣言の角括弧のセットごとに、配列にもう1つの次元が追加される。上のような配列は2次元である。
配列は、任意の数の次元を持つことができます。配列の次元が増えるほど、コードは複雑になります。次の配列には3つの次元があります。
string letters[2][2][2] = {
{
{ "A", "B" },
{ "C", "D" }
},
{
{ "E", "F" },
{ "G", "H" }
}
};
多次元配列の要素へのアクセス
多次元配列の要素にアクセスするには、配列の各次元にインデックス番号を指定します。
このステートメントは、文字配列の最初の行 (0)と3列目 (2)の要素の値にアクセスします。
例
string letters[2][4] = {
{ "A", "B", "C", "D" },
{ "E", "F", "G", "H" }
};
cout << letters[0][2]; // Outputs "C"
次のことを覚えておいてください。配列インデックスは0から始まります。[0]が最初の要素です。[1]は2番目の要素などです。
多次元配列の要素を変更する
要素の値を変更するには、各次元の要素のインデックス番号を参照してください。
例
string letters[2][4] = {
{ "A", "B", "C", "D" },
{ "E", "F", "G", "H" }
};
letters[0][0] = "Z";
cout << letters[0][0]; // Now outputs "Z" instead of "A"
多次元配列のループ
多次元配列をループするには、配列の次元ごとに 1 つのループが必要です。
次の例では、文字配列内のすべての要素を出力します。
例
string letters[2][4] = {
{ "A", "B", "C", "D" },
{ "E", "F", "G", "H" }
};
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 4; j++) {
cout << letters[i][j] << "\n";
}
}
この例は、3次元配列をループする方法を示しています。
例
string letters[2][2][2] = {
{
{ "A", "B" },
{ "C", "D" }
},
{
{ "E", "F" },
{ "G", "H" }
}
};
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
for (int k = 0; k < 2; k++) {
cout << letters[i][j][k] << "\n";
}
}
}
多次元配列を使用する理由
多次元配列は、グリッドを表現するのに優れています。この例は、それらの実用的な使用法を示しています。次の例では、多次元配列を使用して戦艦の小さなゲームを表しています。
例
// We put "1" to indicate there is a ship.
bool ships[4][4] = {
{ 0, 1, 1, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 1, 0 },
{ 0, 0, 1, 0 }
};
// Keep track of how many hits the player has and how many turns they have played in these variables
int hits = 0;
int numberOfTurns = 0;
// Allow the player to keep going until they have hit all four ships
while (hits < 4) {
int row, column;
cout << "Selecting coordinates\n";
// Ask the player for a row
cout << "Choose a row number between 0 and 3: ";
cin >> row;
// Ask the player for a column
cout << "Choose a column number between 0 and 3: ";
cin >> column;
// Check if a ship exists in those coordinates
if (ships[row][column]) {
// If the player hit a ship, remove it by setting the value to zero.
ships[row][column] = 0;
// Increase the hit counter
hits++;
// Tell the player that they have hit a ship and how many ships are left
cout << "Hit! " << (4-hits) << " left.\n\n";
} else {
// Tell the player that they missed
cout << "Miss\n\n";
}
// Count how many turns the player has taken
numberOfTurns++;
}
cout << "Victory!\n";
cout << "You won in " << numberOfTurns << " turns";
プログラミング学習を加速させる
プログラミングをプロの講師に教えてもらいませんか。