我想实现一个函数,获取作为整数数组的维度“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