这是我的示例代码:
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
谢谢
答案 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
...