通过引用传递 3 维可变大小数组 C++

Passing a 3-dimensional variable size array by reference in C++

本文关键字:小数 数组 C++ 引用      更新时间:2023-10-16

我一直在研究将 2D 数组传递给 C++ 函数,以及其他一些类似的文章。但是,我遇到了一个问题,即我正在创建的数组具有两个可变大小的维度。

初始化如下所示:

int** mulePosition;
mulePosition = new int *[boardSize][boardSize][2];

该函数如下所示:

int moveMule (int boardSize, int ***mulePosition)

参考资料看起来像

moveMule (boardSize, mulePosition)

板大小在函数的开头定义,但可能会在每次执行时更改。大小合适的数组将是 int [boardSize][boardSize][2]。

要么通过以下方式使用普通的"三维"数组

int* mulePosition = new int[boardsize*boardsize*2];

并解决其元素计算从开头开始的偏移量:mulePosition[a][b][c] 是mulePosition[boardSize*2*a + 2*b + c]

或者使用数组的数组数组(对应于你的int***声明)或更好(和更简单)的向量向量向量,尽管初始化会稍微复杂一些(你需要初始化每个数组/向量)。

如果 boardSize 不是 const 或 std::array<std::array<boardSize>, boardSize>,请使用 std::vector<std::vector<int>>(有关如何初始化 std::array 的信息,请参阅 Multidimensional std::array)。

话虽如此,将其隐藏在提供漂亮界面的类板中看起来是个好主意。