如何从std::vector初始化自定义typedef的EigenVectorX向量?
用std::vector初始化EigenVectorX的几种方法
针对你的代码场景,这里提供几种实用的初始化方式:
1. 零拷贝映射(高效推荐)
利用Eigen::Map直接将std::vector的内存映射为Eigen向量,无需额外数据拷贝,性能最优:
EigenVectorX ev = Eigen::Map<EigenVectorX>(v.data(), v.size());
如果需要生成独立的向量副本(后续修改ev不会影响原vector),只需追加.copy():
EigenVectorX ev = Eigen::Map<EigenVectorX>(v.data(), v.size()).copy();
2. 先调整尺寸再批量赋值
先将ev的尺寸调整为和vector一致,再通过标准库的拷贝函数完成赋值:
ev.resize(v.size()); std::copy(v.begin(), v.end(), ev.data());
如果习惯手动遍历赋值,也可以这样写:
ev.resize(v.size()); for (size_t i = 0; i < v.size(); ++i) { ev(i) = v[i]; }
3. 定义时直接构造
如果在声明ev的同时完成初始化,可以结合Map或拷贝操作:
// 基于Map构造 EigenVectorX ev(Eigen::Map<const EigenVectorX>(v.data(), v.size())); // 先指定尺寸再拷贝 EigenVectorX ev(v.size()); std::copy(v.begin(), v.end(), ev.data());
内容的提问来源于stack exchange,提问作者Kumar Roshan Mehta
相关产品推荐
相关产品推荐

