【问题标题】:Convert Eigen::Matrix to vector using std::move on Eigen::Matrix::data()在 Eigen::Matrix::data() 上使用 std::move 将 Eigen::Matrix 转换为向量
【发布时间】:2018-12-06 14:12:23
【问题描述】:

我知道这些转换主题已被多次提出,但我找不到考虑移动语义的主题。

我想知道以下是否安全:

Eigen::MatrixXd A(n,n);

//fill matrix A

std::vector<double> A_vec;
A_vec.insert(A_vec.end(), std::make_move_iterator(A.data()), std::make_move_iterator(A.data() + A.size()));

//destruct A

【问题讨论】:

  • 移动与否对于双倍来说没有区别。

标签: c++ eigen move-semantics


【解决方案1】:

假设,您实际上想要为具有移动语义的非平凡标量(而不是 double)执行此操作,这应该是安全的——当然,只要您不使用 A然后。对于double,它也是安全的,但没有区别。

在您的情况下,将std::vector 的数据映射到Eigen::Map 可能会更好,如下所示:

std::vector<double> A_vec(n*n); // allocate data into A_vec
Eigen::Map<Eigen::MatrixXd> A(A_vec.data(), n, n);
// fill matrix A.
// data is immediately stored into A_vec

【讨论】:

    猜你喜欢
    • 2021-12-13
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 2014-05-12
    • 2018-06-17
    相关资源
    最近更新 更多