2011-02-02 82 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和朋友来完成相同的操作。它有一组专门用于描述你所描述情况的类,但它们的用途很少,几乎没有人能理解它们。自己编写代码可以让大多数人更容易阅读和理解。