是否可以通过以下方式将std::vector<unsigned>
映射到Eigen::VectorXi
?
std::vector<unsigned> a = {1,2,3,4,5};
Eigen::VectorXi c = Eigen::VectorXi::Map(a.data(), a.size());
我想跳过这两个步骤之间的步骤:
std::vector<int> b(a.begin(),a.end());
答案 0 :(得分:3)
您的专线
Eigen::VectorXi c = Eigen::VectorXi::Map(a.data(), a.size());
不会“直接将std::vector<unsigned>
映射到Eigen::VectorXi
”,而是将数据复制到新的Eigen::VectorXi
。如果要使用Eigen功能包装现有数据数组,则应使用类似以下内容的方法:
Eigen::Map<Eigen::VectorXi> wrappedData(a.data(), a.size());
然后,您可以像使用其他wrappedData
一样使用VectorXi
,但重新调整基础数据的大小(该数据仍由std::vector
拥有)除外。有关更多详细信息,请参见documentation。
如果您要避免将数据复制到std::vector<int>
,则可以使用“自定义”矩阵类型,即
typedef Eigen::Matrix<unsigned int, Eigen::Dynamic, 1> VectorXui;
Eigen::Map<VectorXui> wrappedData(a.data(), a.size());