Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在没有返回值的情况下使用(本征)unaryExpr和lambda函数?_C++_Lambda_Eigen - Fatal编程技术网

C++ 如何在没有返回值的情况下使用(本征)unaryExpr和lambda函数?

C++ 如何在没有返回值的情况下使用(本征)unaryExpr和lambda函数?,c++,lambda,eigen,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]; r

下面是我的示例代码:

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函数的正确方法吗?如何避免代码返回0;因为我什么都不退

我正在使用g++8.1.0


谢谢

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

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

用c表示向量xi或std::vector或其他什么…

你说的使用Eigen头是什么意思?我不认为ac=bc workingI指的是devel分支,也称为默认分支:啊,我不能使用devel分支,但你的std::vector建议足够好了。谢谢
a(c) = b(c);