使用新运算符C++创建多维数组的简单方法

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

本文关键字:数组 简单 方法 创建 运算符 C++      更新时间:2023-10-16

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

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

有没有更好的方法可以做到这一点? 我想避免写"new int[]..."每次。

如果在运行时未确定维度,并且所有内部数组都具有相同的维度,则此处不需要动态分配。

只需声明一个数组:

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

就是这样!

我建议分配为单维数组。 然后,您可以将 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,
};

也许你可以使用嵌套的 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 的函数。如果你想要一些非常具体的值,它需要是一个手动作业