在C ++中通过引用传递三维可变大小的数组

时间:2014-03-03 22:23:04

标签: c++ arrays variables multidimensional-array pass-by-reference

我一直在处理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]。

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中似乎是一个好主意。