Как использовать (eigen) unaryExpr и лямбда-функции без возвращаемых значений? - PullRequest
0 голосов
/ 06 сентября 2018

Вот мой пример кода:

using namespace Eigen;
VectorXi a = VectorXi::Random(10);
VectorXi b = VectorXi::Random(10);
VectorXi c;
c << 0, 2, 5, 7;
c.unaryExpr([&](int i) { a[i] = b[i]; }); // This will not work
c.unaryExpr([&](int i) { a[i] = b[i]; return 0; }); // This works

Я хочу скопировать элементы из b в индексы использования, хранящиеся в c. Это правильный способ использования лямбда-функции в eigen unaryExpr? Как мне избежать кода "return 0;" так как я ничего не возвращаю.

Я использую g ++ 8.1.0

Спасибо

1 Ответ

0 голосов
/ 06 сентября 2018

Вы используете функциональный стиль программирования для получения чистых побочных эффектов, это не очень элегантно, и это не то, как unaryExpr предполагается использовать. Я бы предложил std::vector<int> для c и цикл for, чтобы прояснить ваши намерения:

std::vector<int> c = {0, 2, 5, 7};
for(auto i:c) a[i] = b[i];

или используя голову Эйгена:

a(c) = b(c);

с c либо VectorXi, либо std::vector<int> или чем-то еще ...

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