2011-02-02 37 views
0

我想實現一個函數,獲取作爲整數數組的維度「n」參數。該函數還獲取定義數組大小的值「k_1,k_2,...,k_n」。然後這個函數會填充這個n維數組。如何在編譯時未知維的情況下實現多維數組?

如何使用C++有效地實現這一點?

例如n = 3時,我會用

vector < vector < vector <int> > > array; 

但我不知道在編譯時的尺寸。

+0

如果n是您的維度,則k_1 ... k_n的數據量不夠。 – Falmarri 2011-02-02 16:17:00

+0

n維數組是問題還是解決方案的一部分? – abesto 2011-02-02 16:17:47

回答

3

使用一維數組,並使用偏移索引的乘法假冒其他尺寸,並且可以通過維用矢量大小的,即

std::vector<int> create_md_array(const std::vector<int> & dimensions) 
{ 
    int size = std::accumulate(dimensions.begin(), dimensions.end(), 1, std::multiplies<int>()); 
    return std::vector<int>(size); 
} 
0

你有一對夫婦的選擇。你可以自己實現它,基本上乘以座標的大小來線性化多維地址,只需要一個簡單的std::vector<whatever>來保存數據。

或者,您可以使用std::valarray和朋友來完成相同的操作。它有一組專門用於描述你所描述情況的類,但它們的用途很少,幾乎沒有人能理解它們。自己編寫代碼可以讓大多數人更容易閱讀和理解。

相關問題