传递多维数组的一部分

时间:2013-12-10 09:15:31

标签: c++ multidimensional-array

我想知道是否可以在c ++中传递多维数组的一部分。例如,假设我有一个三维数组(大小为X * Y * Z):

int array[X][Y][Z];

并说我还有一个函数,它将二维数组(大小为Y * Z)作为其中一个参数:

void function(int stuff[Y][Z]);

是否可以像这样调用函数?

function(array[x_var]);

就像传递三维数组的x_var切片一样,因此传递二维数组[y] [z] ..

或者我是否必须使用新的二维数组,将切片复制到其中,然后将其传递给函数?

2 个答案:

答案 0 :(得分:1)

你可以!仅更改尺寸顺序需要重新排列,例如,如果你有二维数组,那么一个函数应该是一行一列。

答案 1 :(得分:1)

我建议看看Boost Multidimensional Array Library,因为这样可以更轻松地处理切片(在该库中称为“视图”)。如果使用C样式语法int array[X][Y][Z]创建自己的多维数组,则只能在一个维度中传递切片。例如,如果要传递行而不是列,则无法使用C样式语法轻松执行此操作。

如果您使用像boost::multi_array这样的库,那么您可能会发现大部分代码都可以不经修改地工作(因为您也可以将元素称为array[x][y][z]),主要的变化将是定义在构造数组时,数组是正确的大小。顺便说一下,你也可以比在C风格的情况下更容易调整它的大小(在编译时必须修复尺寸)