我需要在C++代码中创建很多小的二维数组.问题是,创建一个简单的数组需要做大量的工作:
new int* [2]{
new int[2]{9, 9},
new int[2]{25, 19}
};有什么更好的方法吗?我想避免写“新int[].”每次都是。
发布于 2020-05-12 23:36:28
如果在运行时没有确定维度,并且所有内部数组都具有相同的维度,则这里不需要动态分配。
只需声明一个数组:
int myArray[2][2] = {
{9, 9},
{25, 19}
};就这样!
发布于 2020-05-12 22:58:30
我建议将其分配为一维数组。然后,您可以将该一维数组视为一个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,
};发布于 2020-05-12 23:24:00
也许您可以使用嵌套的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的函数。如果您想要一些真正特定的值,则需要手动操作。
https://stackoverflow.com/questions/61763319
复制相似问题