Как я могу использовать итераторы stl с Eigen? - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь использовать библиотеку Eigen в проекте, и мне нужно отсортировать вектор. Я попытался следовать документации, и там говорится, что библиотека должна работать предсказуемым образом с итераторами и алгоритмами STL https://eigen.tuxfamily.org/dox-devel/group__TutorialSTL.html. Однако, когда я пытаюсь запустить следующий тестовый код

#include <iostream>
#include <algorithm>
#include <eigen3/Eigen/Dense>
#include <eigen3/Eigen/Core>
int main()
{
    Eigen::Array4i v = Eigen::Array4i::Random().abs();
    std::cout << "Here is the initial vector v:\n" << v.transpose() << "\n";
    std::sort(v.begin(), v.end());
    std::cout << "Here is the sorted vector v:\n" << v.transpose() << "\n";
    return 0;
 }

Iполучить две следующие ошибки:

error: ‘Eigen::Array4i’ {aka ‘class Eigen::Array<int, 4, 1>’} has no member named ‘begin’
9 | std::sort(v.begin(), v.end());
  |             ^~~~~
error: ‘Eigen::Array4i’ {aka ‘class Eigen::Array<int, 4, 1>’} has no member named ‘end’
9 | std::sort(v.begin(), v.end());

Я протестировал его с gcc 9.1.0 и 7.4.0 и моя версия Eigen 3.3.4. Я использую Ubuntu 18.04, и библиотека находится в обычном месте / usr / include. Все остальные функции, которые я пробовал, похоже, работают правильно. Это хорошо известная ошибка, проблема с компилятором или проблема с версией?

1 Ответ

0 голосов
/ 12 октября 2019

Если вы не хотите ждать выхода Eigen 3.4, вы можете использовать это:

std::sort(v.data(), v.data() + v.size());

Метод .data() может заменить отсутствующий .begin(), но .end()метод должен быть построен вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...