使用 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}
};
就是这样!
我需要在 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}
};
就是这样!