初始化的数组构造函数有什么作用?

时间:2014-07-01 05:10:20

标签: c++ eigen

Eigen文档中,我看到了很多这些:

Array (const Scalar &val0, const Scalar &val1)
Array (const Scalar &val0, const Scalar &val1, const Scalar &val2)
Array (const Scalar &val0, const Scalar &val1, const Scalar &val2, const Scalar &val3)

根据文档(http://eigen.tuxfamily.org/dox/classEigen_1_1Array.html),这些构造函数"构造一个具有给定系数的初始化N D向量"。

这是什么意思?如果我做数组(1,2,3),结果是什么?

具体来说,它在每个维度中放置了什么系数,以及每个维度中的数组有多大?根据文档,构造函数Array(1,2,3)应构造一个3D数组,并使用"给定系数"初始化其内容。结果应该如何?

2 个答案:

答案 0 :(得分:2)

构造函数用于固定大小的数组。假设声明为Eigen::Array3i,那么您提到的构造函数初始化一个1D int数组,其中三个元素初始化为指定的值。

答案 1 :(得分:0)

这些构造允许您创建大小最大为4的数组:

Eigen::Array<int, 1, 4> a(1, 2, 3, 4)

如果您尝试使用除N(1-4) x 1数组之外的任何内容进行初始化,则Eigen将抛出编译错误。例如:

Eigen::Array<int, 1, 3> a(1, 2, 3) //Fine
Eigen::Array<int, 3, 1> a(1, 2, 3) //Fine
Eigen::Array<int, 3, 3> a(1, 2, 3) //Compile error

error: ‘THIS_METHOD_IS_ONLY_FOR_VECTORS_OF_A_SPECIFIC_SIZE

我不会像这样初始化它们。有一个关于Eigen初始化here的教程,它为如何初始化数组提供了很好的建议,例如:

Eigen::Array33 a;
a << 1, 2, 3, 4 ...

其中包含文档here

或者您可以使用以下特殊初始化:

Eigen::ArrayXXf a = Eigen::ArrayXXf::Zero(1, 4) //0, 0, 0, 0