我一直在处理Passing a 2D array to a C++ function以及其他一些类似的文章。但是,我遇到了一个问题,我正在创建的数组有两个可变大小的维度。
初始化如下:
int** mulePosition;
mulePosition = new int *[boardSize][boardSize][2];
该功能如下:
int moveMule (int boardSize, int ***mulePosition)
参考文献看起来像
moveMule (boardSize, mulePosition)
Boardsize在函数开头定义,但每次执行可能会更改。 适当大小的数组将是int [boardSize] [boardSize] [2]。
答案 0 :(得分:0)
通过
使用普通的“三维”阵列int* mulePosition = new int[boardsize*boardsize*2];
并解决从头开始计算偏移量的元素:mulePosition [a] [b] [c]为mulePosition[boardSize*2*a + 2*b + c]
,
或使用数组数组(对应于你的int***
声明)或更好(和更简单)的向量向量向量,尽管初始化会稍微复杂一些(你需要初始化)每个数组/向量)。
答案 1 :(得分:0)
如果boardSize不是const或std::vector<std::vector<int>>
,请使用std::array<std::array<boardSize>, boardSize>
(有关如何初始化std :: array,请参阅Multidimensional std::array)。
话虽这么说,将它隐藏在一个提供良好界面的类Board中似乎是一个好主意。