TECH I.S.

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";

実行例»



プログラミング学習を加速させる

プログラミングをプロの講師に教えてもらいませんか。

テックアイエスのプログラミングスクールは初心者も大歓迎です。年齢制限もありません。転職・副業に強く、挫折させない手厚いサポートで稼ぐ力を身につけましょう!

スクールの詳細