logo

C++ 多次元配列

配列は、連続したメモリ位置に保持される同じデータ型項目のコレクションを格納するために使用されるデータ構造の一種です。配列は、配列が成長できる方向の数に基づいて、1 次元または多次元にすることができます。この記事では、2次元配列や3次元配列などの多次元配列について学習します。

C++の多次元配列とは何ですか?

多次元配列は、複数の次元を持つ配列です。これは、各要素が複数のインデックスを使用してアクセスされる、項目の同種のコレクションです。



多次元配列の宣言

  datatype     arrayName    [    size1][size2]...[sizeN];>

どこ、

  • データ・タイプ: 配列に格納されるデータのタイプ。
  • 配列名: アレイの名前。
  • サイズ1、サイズ2、…、サイズN: 各寸法のサイズ。

例:

Two dimensional array: int two_d[2][4]; Three dimensional array: int three_d[2][4][8];>

多次元配列のサイズ

配列のサイズは、データ型のサイズに配列に格納できる要素の総数を乗算したものと等しくなります。多次元配列の各次元のサイズを乗算することで、配列内の要素の合計数を計算できます。



Javaで乱数を生成する

例えば:

int arr1[2][4];>
  • 配列 int arr1[2][4] 合計を保存できる (2*4) = 8 要素。
  • C++ では、int データ型は 4 バイトを必要とし、配列には 8 つの要素があります。 「arr1」 int型の。
  • 合計サイズ = 4*8 = 32バイト
int arr2[2][4][8];>
  • 配列 int arr2[2][4][8] 合計 (2*4*8) = 64 個の要素を保存できます。
  • 「」の合計サイズ ar2 ' = 64*4 = 256バイト

上記の計算を検証するには、次のように使用できます。 のサイズ() 配列のサイズを調べるメソッドです。

C++






// C++ program to verify the size of multidimensional> // arrays> #include> using> namespace> std;> > int> main()> {> >// creating 2d and 3d array> >int> arr1[2][4];> >int> arr2[2][4][8];> > >// using sizeof() operator to get the size of the above> >// arrays> >cout <<>'Size of array arr1: '> <<>sizeof>(arr1)> ><<>' bytes'> << endl;> >cout <<>'Size of array arr2: '> <<>sizeof>(arr2)> ><<>' bytes'>;> > >return> 0;> }>

>

>

出力

Size of array arr1: 32 bytes Size of array arr2: 256 bytes>

最も広く使用されている多次元配列は次のとおりです。

  • 二次元配列
  • 三次元配列

2 次元配列 (または 2D 配列)

C++ の 2 次元配列は、行と列に編成された要素のコレクションです。これはテーブルまたはグリッドとして視覚化でき、各要素には 2 つのインデックス (行用と列用) を使用してアクセスされます。 1 次元配列と同様に、2 次元配列のインデックスも行と列の両方で 0 から n-1 の範囲になります。

C++ での 2 次元配列の構成

2D配列の構文

データ型配列名[ n ][ メートル ];

どこ、

  • n: 行の数。
  • メートル: 列の数。

2D 配列は静的および動的に宣言できます。静的宣言ではコンパイル時にメモリが割り当てられ、動的宣言では実行時にメモリが割り当てられます。上記は、2D 配列の静的宣言の構文です。 2D 配列を動的に宣言する方法については、を参照してください。 これ 記事。

C++ での 2 次元配列の初期化

2D 配列を初期化するさまざまな方法を以下に示します。

  • イニシャライザリストの使用
  • ループの使用

1. Initializer リストを使用して 2D 配列を初期化します。

2 つの方法で初期化リストを使用して 2D 配列を初期化できます。以下は、初期化子リストを使用して 2D 配列を初期化する最初の方法です。

最初の方法: 以下の配列には 2 行 4 列があります。要素は、最初の 4 つの要素が 1 行目に埋められ、次の 4 つの要素が 2 行目に埋められるという方法で埋められます。

int arr[2][4] = {0, 1, 2, 3, 4, 5, 6, 7};>

2 番目の方法: 以下の方法は、2D 配列を初期化するよりクリーンな方法です。ネストされたリストは行内の要素を表し、その中の要素の数は 2D 配列の列の数に等しくなります。ネストされたリストの数は列の数を表します。

int x[2][4] = {{0, 1, 2, 3}, {4, 5, 6, 7}};>

2. ループを使用した 2D 配列の初期化

ループを使用して 2D 配列を初期化することもできます。 2D 配列を初期化するには、2 つのネストされたループを使用する必要があり、ネストされたループは次元と等しくなります。たとえば、3D 配列を初期化するには、3 つのネストされたループを使用する必要があります。例を見てみましょう。

.netチュートリアル

例: 以下の例では、2D 配列を 1 で初期化しています。外側のループは行を追跡するために使用されます。i=0 は 0 のインデックス付けのため最初の行を意味します。同様に j=0 は最初の列を意味し、これを x [0][0] と組み合わせます。は 2D 配列の最初のセルを表します。

int x[2][4]; for(int i = 0; i <2; i++){  for(int j = 0; j <4; j++){  x[i][j] = 1;  } }>

C++ での 2 次元配列の要素へのアクセス

行インデックスと列インデックスを使用して 2 次元配列の要素にアクセスできます。これは行列要素の位置と似ていますが、唯一の違いは、インデックス付けが 0 から始まることです。

構文:

array_name[i][j];>

どこ、

ブロックされた番号
  • 私: 行のインデックス。
  • j: 列のインデックス。

例: 以下は 2 行目、3 列目の要素のインデックスです。

int x[1][2];>

2D 配列の要素を出力するコードを使用してこれを理解してみましょう。

2D配列の例

C++




// c++ program to illustrate the two dimensional array> #include> using> namespace> std;> > int> main()> {> > >int> count = 1;> > >// Declaring 2D array> >int> array1[3][4];> > >// Initialize 2D array using loop> >for> (>int> i = 0; i <3; i++) {> >for> (>int> j = 0; j <4; j++) {> >array1[i][j] = count;> >count++;> >}> >}> > >// Printing the element of 2D array> >for> (>int> i = 0; i <3; i++) {> >for> (>int> j = 0; j <4; j++) {> >cout << array1[i][j] <<>' '>;> >}> >cout << endl;> >}> > >return> 0;> }>

>

>

出力

Javaのプライムノーコード
1 2 3 4 5 6 7 8 9 10 11 12>

説明: 上記のコードでは、カウントを「1」で初期化し、3 行 4 列の 2D 配列を宣言しました。その後、ループの反復ごとに count の値と count の増分値で配列を初期化しました。次に、ネストされたループを使用して 2D 配列を出力します。以下の出力では、3 行と 4 列があることがわかります。

時間計算量: O(n*m)
空間の複雑さ: O(n*m)

ここで、n は行数、m は列数です。

C++ の 3 次元配列

3D 配列は、要素を 3 次元の直方体状の構造に格納するデータ構造です。これは、互いに積み重ねられた複数の 2 次元配列のコレクションとして視覚化できます。 3D 配列内の各要素は、行インデックス、列インデックス、深さインデックスの 3 つのインデックスによって識別されます。

C++での三次元配列構成

C++での三次元配列の宣言

C++ で 3D 配列を宣言するには、2D 次元とともに 3 次元を指定する必要があります。

構文:

dataType arrayName[d][r];>
  • データ・タイプ: 各要素に格納されるデータのタイプ。
  • 配列名: アレイの名前
  • d: 2D 配列の数または配列の深さ。
  • r: 各 2D 配列の行数。
  • c: 各 2D 配列の列の数。

例:

int array[3][5][2];>

C++ での 3 次元配列の初期化

C++ で 3D 配列を初期化するには、2D 配列の初期化に使用したのと同じ方法に従います。 3D 配列では次元が 1 つ多いため、要素のネストされたリストをもう 1 つ追加する必要があります。

C の 3D 配列は、以下を使用して初期化できます。

  1. イニシャライザリスト
  2. ループ

イニシャライザリストを使用した 3D 配列の初期化

方法 1: このメソッドでは、中括弧内に要素の合計数を記述する必要があり、各項目は指定された寸法に従ってその位置に配置されます。

int x[3][5][2] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,   10, 11, 12, 13, 14, 15, 16, 17, 18, 19,  20, 21, 22, 23, 24, 25, 26, 27, 28, 30};>

方法 2 (より良い方法) : この方法では、ネストされたリストを使用して要素を分割しているため、読みやすくなっています。

int x[3][5][2] =   {      {   {0, 1}, {2, 3}, {4, 5}, {6, 7}, {8, 9}   }  ,     {   {10, 11}, {12, 13}, {14, 15}, {16, 17}, {18, 19}   }  ,    {   {20, 21}, {22, 23}, {24, 25}, {26, 27}, {28, 30}   }  ,    }  ;>

ループを使用した 3D 配列の初期化

このメソッドは、3 次元にもう 1 つ入れ子になったループを使用して 2D 配列を初期化するのと同じです。

int x[3][5][2]; for (int i = 0; i <3; i++) {  for (int j = 0; j <5; j++) {  for (int k = 0; k <2; k++) {  x[i][j][k] =   (some_value)  ;  }  } }>

C++ での 3 次元配列の要素へのアクセス

3D 配列の要素へのアクセスは、2D 配列の要素へのアクセスと同じくらい簡単です。ここで追加の作業を行う必要があるのは、3 次元を追跡するためにネストされたループを 1 つ追加することです。

C++


PVR 完全形式



// C++ program to illustrate the 3d array> #include> using> namespace> std;> > int> main()> {> > >int> count = 0;> >// declaring 3d array> >int> x[2][2][3];> > >// initializing the array> >for> (>int> i = 0; i <2; i++) {> >for> (>int> j = 0; j <2; j++) {> >for> (>int> k = 0; k <3; k++) {> >x[i][j][k] = count;> >count++;> >}> >}> >}> > >// printing the array> >for> (>int> i = 0; i <2; i++) {> >for> (>int> j = 0; j <2; j++) {> >for> (>int> k = 0; k <3; k++) {> >printf>(>'x[%d][%d][%d] = %d '>, i, j, k,> >x[i][j][k]);> >count++;> >}> >}> >}> > >return> 0;> }>

>

>

出力

x[0][0][0] = 0 x[0][0][1] = 1 x[0][0][2] = 2 x[0][1][0] = 3 x[0][1][1] = 4 x[0][1][2] = 5 x[1][0][0] = 6 x[1][0][1] = 7 x[1][0][2] = 8 x[1][1][0] = 9 x[1][1][1] = 10 x[1][1][2] = 11>

説明: 上記のコードでは、上で説明したループを使用して 3D 配列を初期化し、count 変数を使用して 0 ~ 7 の数値を指定し、3D 配列の初期化に使用したのと同じループを使用して要素にアクセスします。唯一の違いは、特定の位置に要素を割り当てる代わりに、 x[0][0][1]=1 以下の出力に見られるように、その場所に保存されている要素を出力しています。