C++で1次元配列を使用して2次元配列をエミュレートする
この問題では、2次元配列から1次元配列への変換について理解します。 2次元配列の要素を1次元配列に格納する方法を見ていきます。
ここで、1次元配列のサイズは、2次元配列の要素の総数であるn*mと同じです。
プログラミングでは、2次元配列を1次元配列に格納する方法が2つあります。それらは-
- 行メジャー
- 列メジャー
行メジャー: 行メジャーでは、行のすべての要素が一緒に格納されてから、次の行に移動します。
サイズnXmの2次元配列の要素にインデックス(i、j)が格納されている場合、1次元配列のインデックスは
です。(j)+(i)* m
コラムメジャー: 列メジャーでは、列のすべての要素が一緒に格納されてから、次の列がトラバースされます。
サイズnXmの2次元配列の要素にインデックス(i、j)が格納されている場合、1次元配列のインデックスは
です。(i)+(j)* n
問題を理解するための例を見てみましょう
入力: n =3、m =5、(i、j)=(0、2)
出力: 行メジャー=
列メジャー=
説明:
行メジャー=2+ 0 * 3 =3
Col-major =0 + 2 * 5 =10
2次元から1次元への変換を説明するプログラム
例
#include<iostream> using namespace std; int main() { int n = 3; int m = 5; int grid[n][m] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}, {13, 14, 15}}; int i = 0; int j = 2; int rowMajorIndex = i*n + j; cout<<"Index of element at index (0, 2) in 1-D array using row-major is "<<rowMajorIndex<<endl; int colMajorIndex = i + j*m; cout<<"Index of element at index (0, 2) in 1-D array using column-major is "<<colMajorIndex<<endl; return 0; }
出力-
Index of element at index (0, 2) in 1-D array using row-major is 2 Index of element at index (0, 2) in 1-D array using column-major is 10
-
newを使用してC++で2D配列を宣言するにはどうすればよいですか
動的2D配列は、基本的に配列へのポインターの配列です。これは、寸法が3x4の2D配列の図です。 アルゴリズム Begin Declare dimension of the array. Dynamic allocate 2D array a[][] using new. Fill the array with the elements. Print the array. Clear the memory by deleting it. End サンプルコード
-
newを使用してC++で2次元配列を宣言するにはどうすればよいですか?
動的2D配列は、基本的に配列へのポインターの配列です。したがって、最初にポインタの配列をポインタに初期化してから、ループ内の各1D配列を初期化する必要があります。 例 #include<iostream> using namespace std; int main() { int rows = 3, cols = 4; int** arr = new int*[rows]; for(int i = 0; i < rows; ++i) arr[i] = new int[co