C++ 将Eigen::VectorXd类型转换为std::vector

C++ 将Eigen::VectorXd类型转换为std::vector,c++,eigen,C++,Eigen,它们有许多相反的链接,但在我的特定情况下,我无法从Eigen::Matrix或Eigen::VectorXd中找到std::vector; vector<int> vec(mat.data(), mat.data() + mat.rows() * mat.cols()); 您不能进行类型转换,但可以轻松复制数据: VectorXd v1; v1 = ...; vector<double> v2; v2.resize(v1.size()); VectorXd::Map(&

它们有许多相反的链接,但在我的特定情况下,我无法从Eigen::Matrix或Eigen::VectorXd中找到std::vector;
vector<int> vec(mat.data(), mat.data() + mat.rows() * mat.cols());

您不能进行类型转换,但可以轻松复制数据:

VectorXd v1;
v1 = ...;
vector<double> v2;
v2.resize(v1.size());
VectorXd::Map(&v2[0], v1.size()) = v1;
VectorXd v1;
v1=。。。;
矢量v2;
v2.调整大小(v1.size());
VectorXd::Map(&v2[0],v1.size())=v1;

您可以从和到特征向量执行此操作:

    //init a first vector
    std::vector<float> v1;
    v1.push_back(0.5);
    v1.push_back(1.5);
    v1.push_back(2.5);
    v1.push_back(3.5);

    //from v1 to an eignen vector
    float* ptr_data = &v1[0];
    Eigen::VectorXf v2 = Eigen::Map<Eigen::VectorXf, Eigen::Unaligned>(v1.data(), v1.size());

    //from the eigen vector to the std vector
    std::vector<float> v3(&v2[0], v2.data()+v2.cols()*v2.rows());


    //to check
    for(int i = 0; i < v1.size() ; i++){
        std::cout << std::to_string(v1[i]) << " | " << std::to_string(v2[i]) << " | " << std::to_string(v3[i]) << std::endl;
    }
//初始化第一个向量
std::向量v1;
v1.推回(0.5);
v1.推回(1.5);
v1.推回(2.5);
v1.推回(3.5);
//从v1到eignen向量
浮点*ptr_数据=&v1[0];
Eigen::VectorXf v2=Eigen::Map(v1.data(),v1.size());
//从特征向量到标准向量
std::vector v3(&v2[0],v2.data()+v2.cols()*v2.rows());
//查证
对于(int i=0;istd::cout heyy谢谢你的回复..但是我发现上面的答案更清楚。
mat.rows()*mat.cols()
可以简化为
mat.size()
,但是,请注意,此解决方案仅适用于普通的
矩阵
对象,而使用
映射
也适用于子矩阵。如果有人需要将矩阵的一行复制到向量中:
向量向量(arr.cols());映射(&vec[0],1,mat.cols())=mat.row(0);
v1.data()
应替换为
ptr\U数据
,否?