在 Eigen::Matrix::data() 上使用 std::move 将 Eigen::Matrix 转换为向量

Convert Eigen::Matrix to vector using std::move on Eigen::Matrix::data()

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

我想知道以下是否安全:

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

假设,您实际上想对具有移动语义的非平凡标量(而不是 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