如何在没有 return 值的情况下使用 (eigen) unaryExpr 和 lambda 函数?

How to use (eigen) unaryExpr and lambda function without return values?

这是我的示例代码:

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。这是在 eigen unaryExpr 中使用 lambda 函数的正确方法吗?我如何避免代码 "return 0;" 因为我没有返回任何东西。

我正在使用 g++ 8.1.0

谢谢

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

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

或者使用Eigen的头部:

a(c) = b(c);

c VectorXistd::vector<int> 或其他...