404 Not Found

404 Not Found


nginx

多次元配列

[一次元]配列[のようなもの]「[一列のメールボックス]」、[では、もし][表形式のデータ]([例えば]Excel[の表]、[チェス盤]、[行列])[を表す場合は]?

[これには]多次元配列——配列[の中の]配列——が必要になります。


1. 2次元配列

(1) 1.1 2次元配列とは?

2次元配列とは、「配列の配列」——つまり、[各要素自体がまた一つの]配列である。

[生活シーン] 番組[での対応]
Excel [表]([行] × [列]) 2次元配列
[盤面](8 × 8) 2次元配列
[行列](3 × 3) 2次元配列

(2) 1.2 2次元配列の宣言

[文法]:

▶ サンプル 2: codeexample (難易度 ⭐)

CPP
 ;
▶ 試してみよう

例:

CPP
int matrix[3][4]; // 3 4 'sarray

メモリ[レイアウト]:

TEXT
matrix[0][0] matrix[0][1] matrix[0][2] matrix[0][3] ← 0 
matrix[1][0] matrix[1][1] matrix[1][2] matrix[1][3] ← 1 
matrix[2][0] matrix[2][1] matrix[2][2] matrix[2][3] ← 2 

💡 [要点]: 2次元配列の[最初の添字は行]、[2番目の添字は列]



2. 2次元配列の初期化

(1) 2.1 [時]の宣言と初期化

CPP
#include iostream

int main() {
 //:
 int matrix[3][4] = {
 {1, 2, 3, 4},
 {5, 6, 7, 8},
 {9, 10, 11, 12}
 };
 
 //:(,)
 int matrix2[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
 
 return 0;
}

(2) 2.2 [一部]初期化

CPP
#include iostream

int main() {
 int matrix[3][4] = {
 {1, 2}, //, 0
 {5}, //, 0
 {} // 0
 };
 
 return 0;
}

💡 [ヒント]: [省略された行または列は自動的に] 0 に初期化されます。



3. [アクセス]2次元配列[要素]

(1) 3.1 [要素の読み取り]

CPP
#include iostream

int main() {
 int matrix[3][4] = {
 {1, 2, 3, 4},
 {5, 6, 7, 8},
 {9, 10, 11, 12}
 };
 
 std::cout << ":" << matrix[0][0] << std::endl; // 1
 std::cout << ":" << matrix[1][2] << std::endl; // 7
 std::cout << ":" << matrix[2][3] << std::endl; // 12
 
 return 0;
}

(2) 3.2 [要素の編集]

CPP
#include iostream

int main() {
 int matrix[3][4] = {
 {1, 2, 3, 4},
 {5, 6, 7, 8},
 {9, 10, 11, 12}
 };
 
 matrix[1][2] = 100; // 100
 std::cout << ":" << matrix[1][2] << std::endl; // 100
 
 return 0;
}


4. [反復処理]2次元配列

(1) 4.1 [ネストした] forループ[の反復処理]

CPP
#include iostream

int main() {
 int matrix[3][4] = {
 {1, 2, 3, 4},
 {5, 6, 7, 8},
 {9, 10, 11, 12}
 };
 
 //:
 for (int i = 0; i < 3; i++) {
 //:
 for (int j = 0; j < 4; j++) {
 std::cout << matrix[i][j] << "\t";
 }
 std::cout << std::endl; // ...
 }
 
 return 0;
}

出力:

TEXT
1	2	3	4
5	6	7	8
9	10	11	12

💡 [要点]: [外側の]ループ[で][行]を制御し、[内側の]ループ[で][列]を制御する。



5. 演習:[行列の加法]

(1) ▶ サンプル:1:[2つの] 3×3 [行列の加算] (難易度 ⭐⭐)

CPP
#include iostream

int main() {
 int A[3][3] = {
 {1, 2, 3},
 {4, 5, 6},
 {7, 8, 9}
 };
 
 int B[3][3] = {
 {9, 8, 7},
 {6, 5, 4},
 {3, 2, 1}
 };
 
 int C[3][3]; // ...
 
 // ...
 for (int i = 0; i < 3; i++) {
 for (int j = 0; j < 3; j++) {
 C[i][j] = A[i][j] + B[i][j];
 }
 }
 
 // output
 std::cout << "C = A + B:" << std::endl;
 for (int i = 0; i < 3; i++) {
 for (int j = 0; j < 3; j++) {
 std::cout << C[i][j] << "\t";
 }
 std::cout << std::endl;
 }
 
 return 0;
}
▶ 試してみよう

出力:

TEXT
 C = A + B:
10	10	10
10	10	10
10	10	10


6. [3次元]配列([選択科目])

(1) 6.1 [3次元]配列とは何か?

[3次元]配列[とは]「2次元配列[の]配列」のことです。

[生活シーン] 番組[での対応]
[複数の2次元表が重なっている] [3次元]配列
[立方体]([長さ] × [幅] × [高さ]) [3次元]配列

(2) 6.2 [和访问]の宣言

CPP
#include iostream

int main() {
 int cube[2][3][4]; // 2,3,4
 
 // ...
 cube[0][1][2] = 5; // 0, 1, 2
 cube[1][2][3] = 10; // 1, 2, 3
 
 return 0;
}

💡 [ヒント]: [3次元]配列は[可視化が難しいため]、[通常は] [科学計算]や[コンピュータグラフィックス]でのみ使用されます。[実際の]プロジェクトでは、std::vectorの使用を[優先してください]([後ほど学習します])。



7. [よくある]エラー

(1) 7.1 [下付き文字の順序が逆になっている]

エラー例:

CPP
#include iostream

int main() {
 int matrix[3][4];
 
 matrix[1][2] = 5; // ✅:Lesson,Lesson
 matrix[2][1] = 10; // ✅:Lesson,Lesson
 
 // ❌:andwritereverse
 //,
 std::cout << matrix[2][1] << std::endl;
 
 return 0;
}

(2) 7.2 配列[インデックスオーバーフロー]

エラー例:

CPP
#include iostream

int main() {
 int matrix[3][4];
 
 matrix[3][0] = 5; // ❌!max 2
 matrix[0][4] = 10; // ❌!max 3
 
 return 0;
}

💡 [ヒント]: 2次元配列 matrix[m][n] の [添字の範囲は]:


❓ よくある質問

Q:2次元配列はメモリ内にどのように格納されるのか? A:C++の2次元配列は「行優先」(Row-Major)方式です――まず1行目のすべての要素を格納し、次に2行目を格納し、以下同様に格納していきます。 > > 行列[3][4]のメモリ上の配置: > [0] [0] [0][1] [0][2] [0] [3] [1][0] [1][1] ... [2][3] > Q:2次元配列を関数に[どう渡す]のですか? A:配列[名]、[行数]、[列数]を[渡す必要があります]。 > > void printMatrix(int arr[4], int rows) { // [列数は必ず指定]する必要があります! > for (int i = 0; i < rows; i++) { > for (int j = 0; j < 4; j++) { > std::cout << arr[i][j] << "\t"; > } > std::cout << std::endl; > } > } > Q:2次元配列[は動的なサイズに変更できますか]? A:[通常の]配列では[できません]([サイズはコンパイル時に]確定している必要があります)。

[解決方法]:

  1. [用] std::vector<std::vectorint>([推奨]、[後ほど学習])
  2. [動的メモリ]の[割り当て]([後ほど学ぶ]ポインタ[と] new

Q:multi dimensional arraysについて最も重要なことは何ですか? A:まず核心概念を理解し、その後実践的な例で練習することが重要です。

Q:multi dimensional arraysを効果的に練習するにはどうすればよいですか? A:簡単な例から始め、徐々に複雑さを増やし、常にコードをテストしてください。

📖 まとめ


📝 練習問題

  1. 初心者(難易度 ⭐): [2×3の] 2次元配列を宣言し、[次のように初期化する]:
TEXT
1 2 3
4 5 6

[その後]この配列を出力します。

  1. 中級(難易度 ⭐⭐): [関数] void transpose(int arr[3], int rows) を記述し、3×3 [行列の転置]([要素の入れ替え])を[計算]する。
1 2 3
4 5 6
7 8 9:
1 4 7
2 5 8
3 6 9
  1. 上級(難易度 ⭐⭐⭐): [「三目並べ」]という[ゲーム]を[実装]する[プログラム]を作成してください:

8. 🚀 次は

[習得した]多次元配列、[次は] C [スタイルの]文字列([第]18[回])―― [文字]配列[を用いて]文字列を表現し、C++の文字列[の内部仕組み]を理解する。

Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%