我尝试从使用std c ++动态容器为向量创建的3D矩阵中读出元素。 以下是我初始化矩阵的方法:
typedef vector<vector<vector<ClassA> > > matrix3D;
在我的名为“ClassA”的班级中,我有以下公共成员:
double a, b, c;
然后在我的主文件中,我填写矩阵:
double varA=M_PI; double varB=varA; double varC=varA;
matrix3D[i][j][k].a = varA;
matrix3D[i][j][k].b = varB;
matrix3D[i][j][k].c = varC;
现在,当我将双打读入使用Eigen / Dense库创建的向量时,向量的类型变为矩阵:
Vector3d vectorEigen;
vectorEigen << matrix3D[i][j][k].a, matrix3D[i][j][k].b, matrix3D[i][j][k].c;
和vectorEigen
成为Eigen::Matrix<double, 3,1,0,3,1>
有没有人知道我错过了什么?
答案 0 :(得分:0)
内部Eigen将向量表示为只有一列的矩阵。因此,矢量(就像“普通”矩阵)实际上是Eigen::Matrix
模板类的实例。
为了简化程序员,Eigen使用C ++的typedef
来定义矢量类,这些类是具有特定选项的Eigen::Matrix<>
的同义词。例如,Vector3d
中的Eigen
类型为typedef,表示其元素为double
并且有3行1列的矩阵:
typedef Matrix<double, 3, 1> Vector3d
Matrix模板类实际上有6个模板参数,最后3个是默认参数。这是完整的签名:
template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
class Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols >
如果编译器在错误消息中引用Eigen::Matrix<double, 3,1,0,3,1>
,则它正在讨论具有以下模板参数的Eigen::Matrix
:
_Scalar
= double _Rows
= 3 _Cols
= 1 _Options
= 0(默认情况下)_MaxRows
= _Rows
(默认情况下)= 3 _MaxCols
= _Cols
(默认情况下)= 1 所以Eigen::Matrix<double, 3,1,0,3,1>
只是编译器在解析Vector3d
和模板参数后看到的完整类型的typedef
。
类型根本没有改变,你只需在代码中使用Vector3d
简写符号,而编译器通过其显式类型引用它。
答案 1 :(得分:0)