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