有一个具有Eigen :: matrix属性的类,该属性映射到std :: vector属性

时间:2017-01-26 23:46:21

标签: c++ eigen eigen3

我希望class Test有一个映射到Test :: _ a的Eigen :: Matrix。 这意味着每当我更改std :: vector时,Eigen :: Matrix也会立即反映出变化,因为向量和矩阵都使用相同的内存块来保存数据。

这有效:

#include <Eigen/Dense>
#include <vector>
int main() {
    std::vector<int> a;
    a.resize(10);
    typedef Eigen::Matrix<int, 1, Eigen::Dynamic>  mat_type;
    Eigen::Map< mat_type > a_eigen(a.data(), a.size());
}

但这不起作用....

#include <Eigen/Dense>
#include <vector>
class Test {
public:
    Test(int size) {
        _a.resize(size);
        _a_eigen(_a.data(), size );
    }
    std::vector<int> _a;
    Eigen::Map< Eigen::Matrix<int, 1, Eigen::Dynamic> > _a_eigen;
};
int main() {
    Test t(10);
}

下面也不起作用,因为cout什么都不打印

#include <Eigen/Dense>
#include <vector>
#include <iostream>
class Test {
public:
    typedef Eigen::Matrix<int, 1, Eigen::Dynamic> mat_type;
    Test(int size) {
        _a.resize(size);
        Eigen::Map<mat_type>(_a_eigen) = Eigen::Map<mat_type>(_a.data(), size );
        for (int i = 0; i < size; ++i) _a[i] = i;
    }
    std::vector<int> _a;
    mat_type _a_eigen;
};
int main() {
    Test t(10);
    std::cout << t._a_eigen;
}

1 个答案:

答案 0 :(得分:4)

您需要在班级的初始化列表中初始化地图&#39;构造:

#include <Eigen/Core>
#include <vector>
class Test {
public:
    Test(int size) : _a(size), _a_eigen(_a.data(), size) { }
    std::vector<int> _a;
    Eigen::Map< Eigen::Matrix<int, 1, Eigen::Dynamic> > _a_eigen;
};