использовать функции stdlib с индексацией вместо итераторов? - PullRequest
0 голосов
/ 09 января 2019

Я хочу использовать std :: частичный_сум на Eigen :: VectorXd , но мне вообще не удалось найти итераторы в структурах данных Eigen. Есть ли какая-нибудь быстрая оболочка Iterator, которая использует классическую индексацию под капотом? Или что может быть хорошим способом сделать это вместо повторной реализации частичной суммы с индексацией?

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Это было реализовано в октябре 2018 года и будет частью версии 3.4. Вы уже можете использовать их с внешней версией, например,

void foo(Eigen::VectorXd& in_out)
{
    std::partial_sum(in_out.begin(), in_out.end(), in_out.begin());
}

Демонстрация Годболта (показывает код, эквивалентный std::vector): https://godbolt.org/z/bFxcCA

См. Этот (объединенный) запрос на извлечение, если вас интересуют детали: https://bitbucket.org/eigen/eigen/pull-requests/519/

0 голосов
/ 09 января 2019

Вы всегда можете получить необработанный указатель на ваши данные и использовать его вместе с размером.

std::partial_sum(array.data(), array.data() + array.rows() * array.cols(), output.data());

Однако в Eigen доступны 2D итераторы, если вы хотите сначала выполнить итерацию по одному измерению, а затем по другому для каждого элемента.

...