我想實現一個函數,獲取作爲整數數組的維度「n」參數。該函數還獲取定義數組大小的值「k_1,k_2,...,k_n」。然後這個函數會填充這個n維數組。如何在編譯時未知維的情況下實現多維數組?
如何使用C++有效地實現這一點?
例如n = 3時,我會用
vector < vector < vector <int> > > array;
但我不知道在編譯時的尺寸。
我想實現一個函數,獲取作爲整數數組的維度「n」參數。該函數還獲取定義數組大小的值「k_1,k_2,...,k_n」。然後這個函數會填充這個n維數組。如何在編譯時未知維的情況下實現多維數組?
如何使用C++有效地實現這一點?
例如n = 3時,我會用
vector < vector < vector <int> > > array;
但我不知道在編譯時的尺寸。
使用一維數組,並使用偏移索引的乘法假冒其他尺寸,並且可以通過維用矢量大小的,即
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);
}
你有一對夫婦的選擇。你可以自己實現它,基本上乘以座標的大小來線性化多維地址,只需要一個簡單的std::vector<whatever>
來保存數據。
或者,您可以使用std::valarray
和朋友來完成相同的操作。它有一組專門用於描述你所描述情況的類,但它們的用途很少,幾乎沒有人能理解它們。自己編寫代碼可以讓大多數人更容易閱讀和理解。
如果n是您的維度,則k_1 ... k_n的數據量不夠。 – Falmarri 2011-02-02 16:17:00
n維數組是問題還是解決方案的一部分? – abesto 2011-02-02 16:17:47