多次元配列と1次元配列の対応関係

多次元配列と1次元配列の対応関係をまとめておきます。

多次元配列と1次元配列の対応関係

2次元配列 <-> 1次元配列
double[n1][n2] <-> double[n1 * n2]
a2[i1][i2] <-> a1[i1 * n2 + i2]

3次元配列 <-> 1次元配列
double[n1][n2][n3] <-> double[n1 * n2 * n3]
a3[i1][i2][i3] <-> a1[i1 * n2 * n3 + i2 * n3 + i3]

4次元配列 <-> 1次元配列
double[n1][n2][n3][n4] <-> double[n1 * n2 * n3 * n4]
a4[i1][i2][i3][i4] <-> a1[i1 * n2 * n3 * n4 + i2 * n3 * n4 + i3 * n4 + i4]

5次元配列 <-> 1次元配列
double[n1][n2][n3][n4][n5] <-> double[n1 * n2 * n3 * n4 * n5]
a5[i1][i2][i3][i4][i5] <-> a1[i1 * n2 * n3 * n4 * n5 + i2 * n3 * n4 * n5 + i3 * n4 * n5 + i4 * n5 + i5]

converter.cpp
// 1-dimensional array -> 2-dimensional array
void convert(double* a1, double** a2, int n1, int n2) {
  int i = 0;
  for (int i1 = 0; i1 < n1; ++i1) {
    for (int i2 = 0; i2 < n2; ++i2) {
      a2[i1][i2] = a1[i++];
    }
  }
}

// 2-dimensional array -> 1-dimensional array
void convert(double** a2, double* a1, int n1, int n2) {
  int i = 0;
  for (int i1 = 0; i1 < n1; ++i1) {
    for (int i2 = 0; i2 < n2; ++i2) {
      a1[i++] = a2[i1][i2];
    }
  }
}

// 1-dimensional array -> 3-dimensional array
void convert(double* a1, double*** a3, int n1, int n2, int n3) {
  int i = 0;
  for (int i1 = 0; i1 < n1; ++i1) {
    for (int i2 = 0; i2 < n2; ++i2) {
      for (int i3 = 0; i3 < n3; ++i3) {
        a3[i1][i2][i3] = a1[i++];
      }
    }
  }
}

// 3-dimensional array -> 1-dimensional array
void convert(double*** a3, double* a1, int n1, int n2, int n3) {
  int i = 0;
  for (int i1 = 0; i1 < n1; ++i1) {
    for (int i2 = 0; i2 < n2; ++i2) {
      for (int i3 = 0; i3 < n3; ++i3) {
        a1[i++] = a3[i1][i2][i3];
      }
    }
  }
}

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中