Преобразовать Eigen :: Matrix в вектор, используя std :: move on Eigen :: Matrix :: data () - PullRequest
0 голосов
/ 06 декабря 2018

Я знаю, что эти темы конвертации поднимались несколько раз, но я не мог найти одну, учитывая семантику перемещения.

Мне интересно, безопасно ли следующее:

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

1 Ответ

0 голосов
/ 06 декабря 2018

Предполагая, что вы действительно хотите сделать это для нетривиального скаляра (вместо 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
...