使用 new 运算符在 C++ 中创建多维数组的简便方法

Easy way to create multiple-dimension arrays in C++ with new operator

我需要在 C++ 代码中创建许多小型二维数组。 问题是即使创建一个简单的数组也需要大量工作:

new int* [2]{
            new int[2]{9, 9},
            new int[2]{25, 19}
    };

有什么更好的方法吗? 我想避免每次都写 "new int[]..."。

我建议分配为一维数组。然后,您可以将一维数组视为二维数组:

const unsigned int MAX_ROWS = 2U;
const unsigned int MAX_COLUMNS = 5U;
int example_array[MAX_ROWS * MAX_COLUMNS];
//  Get value at [row][column]:
unsigned int one_dim_index = (row * MAX_COLUMNS) + column;
int value = example_array[one_dim_index];

对于小数组,这会更有效,因为处理器可以将整个连续数组放入数据缓存中。使用您的解决方案,一个指针数组,您不知道子数组位于何处,并且它们可能不连续(因此需要重新提取到缓存中)。

编辑 1:初始化
您可以通过使行和列 漂亮 来初始化数组:

int example_array[MAX_ROWS * MAX_COLUMNS] =
{
    /* row 0 */ 1, 2, 3, 4, 5,
    /* row 1 */ 6, 7, 8, 9, 10,
};

也许你可以使用嵌套的 for 循环来完成任务

const int ARRAY_SIZE = 2;

int **create_array() {

  int **array = new int*[ARRAY_SIZE];
  if (array == nullptr) { return nullptr; }

  for (int i=0; i<ARRAY_SIZE; i++) {
    array[i] = new int[ARRAY_SIZE];
    if (array[i] == nullptr) { return nullptr; }
  }
  return array;
}

如果您想评估这些值,可以直接在此处进行。但它们应该来自 i 的函数。如果您想要一些真正具体的值,则需要手动完成

如果维数不是运行时决定的,所有内部数组的维数都相同,这里不需要动态分配。

只需声明一个数组:

int myArray[2][2] = {
   {9, 9},
   {25, 19}
};

就是这样!