Легко копировать данные между, например, Eigen::VectorXd
и std::vector<double>
или std::vector<Eigen::Vector3d>
, напримерСоздать Eigen :: Ref из std :: vector
std::vector<Eigen::Vector3> vec1(10, {0,0,0});
Eigen::VectorXd vec2(30);
VectorXd::Map(&vec2[0], vec1.size()) = vec1;
(смотри, например, https://stackoverflow.com/a/26094708/4069571 или https://stackoverflow.com/a/21560121/4069571)
Кроме того, можно создать Eigen::Ref<VectorXd>
из матрицы блока/колонки/... например, как
MatrixXd mat(10,10);
Eigen::Ref<VectorXd> vec = mat.col(0);
Вопрос
Возможно ли создать Eigen::Ref<VectorXd>
от std::vector<double>
или даже std::vector<Eigen::Vector3d>
без предварительного копирования данных?
В соответствии с документацией это должно быть возможно: * По умолчанию a Ref может ссылаться на любое плотное векторное выражение float, имеющее смежную макет памяти. * Возможно, вам придется «Eigen :: Map» 'std :: vector 'сначала, а затем заверните его как' Ref'. Я всегда использую функции шаблонов, а 'Ref' предназначен для не-шаблонных функций. Так что не пробовали, но должны работать. Ссылка на ref doc: http://eigen.tuxfamily.org/dox///classEigen_1_1Ref.html –
NameRakes