如何使用(eigen)unaryExpr和lambda函数而没有返回值?

时间:2018-09-05 21:54:41

标签: c++ lambda eigen

这是我的示例代码:

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

我想使用存储在c中的索引将元素从b复制到a。这是在本征unaryExpr中使用lambda函数的正确方法吗?如何避免代码“返回0;”因为我什么也没退。

我正在使用g ++ 8.1.0

谢谢

1 个答案:

答案 0 :(得分:1)

您正在使用函数式编程风格来产生纯净的副作用,这不是很优雅,这不是应该使用unaryExpr的方式。我建议使用std::vector<int>的{​​{1}}和for循环来使您的意图更清晰:

c

或使用Eigen的负责人:

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

使用a(c) = b(c); c或其他任何形式的VectorXi ...