使用新的操作符在C++中轻松创建多维数组的方法。

问题描述 投票:0回答:1

我需要在C++代码中创建很多小的2维数组.问题是,即使是一个简单的数组,创建起来也很费劲。

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

我想避免每次都写 "new int[]..."。

c++ arrays new-operator
1个回答
4
投票

如果维度不是在运行时决定的,而且所有内部数组的维度都一样,这里就不需要动态分配了。

只要声明一个数组就可以了。

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

就可以了!


3
投票

我建议按单维数组分配。 然后,你可以把1D数组当作一个2D数组。

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,
};

2
投票

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

const int ARRAY_SIZE = 2

int **foo() {

  int **array = New int*[ARRAY_SIZE];
  if (array == NULL) { return NULL; }

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

如果你想分配值,你可以直接在这里做。但它们应该来自于i的函数。如果你想要一些非常具体的值,就需要手动操作

© www.soinside.com 2019 - 2024. All rights reserved.