2013-12-10 54 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樣式更容易調整它的尺寸(編譯時必須修正尺寸)