2013-12-10 48 views
1

我想知道是否有可能在C++中传递多维数组的一部分。例如说我有三个维度(尺寸X * Y * Z)的数组:传递多维数组的一部分

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

并说我也有一个函数,二维阵列(尺寸Y * Z)作为它的一个参数:

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

是否可以这样调用函数?

function(array[x_var]); 

如像通过三维阵列之用,因此传递效果的二维阵列[Y] [Z]的x_var切片..

或者我将不得不使用一个新的双二维数组,将切片复制到该数组中,然后将其传递给函数?

+0

考虑使用一个体面的线性代数库:请看www.boost.org上的BLAS。然后你可以传递一个对象。 – Bathsheba

+1

为什么不简单地尝试一下,看看会发生什么? –

+0

数组衰减指针,所以在这两种情况下,你都传递一个指针,不知道你要在这里保存/做什么。 – Andreas

回答

1

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

1

我建议看看Boost Multidimensional Array Library,因为这样可以更容易地处理切片(在该库中称为“视图”)。如果使用C风格语法int array[X][Y][Z]制作自己的多维数组,则只能在一个维度上传递切片。例如,如果你想传递一行而不是一列,那么你不能用C风格的语法轻松做到这一点。

如果您使用类似boost::multi_array的库,那么您可能会发现大部分代码都可以不加修改地工作(因为您也可以将元素作为array[x][y][z]),所以主要更改将定义为正确的大小当你构造它。顺便说一句,你也可以比C样式更容易调整它的尺寸(编译时必须修正尺寸)