我的代码看起来像这样:
int multiplyBy2 (int x) {return x*2;}
int add10 (int x) {return x+10;}
int divideBy2 (int x) {return x/2;}
QVector<int> doAnything(QVector<int> list, QVector<std::function<int (int)>> methods){
for(int i = 0; i< methods.size(); i++){
std::transform(list.begin(), list.end() , list.begin() ,methods.at(i));
}
return list;
}
int main(int argc, char *argv[])
{
QVector<int> list {1,2,3,4,5};
QVector<std::function<int (int)>> functions {multiplyBy2 , add10 , divideBy2};
auto result = doAnything(list, functions);
std::for_each(result.begin(), result.end(), [](int i){qDebug() << i;});
return 0;
}
函数doAnything在值列表上执行函数列表 这段代码工作正常。
现在我已经尝试过,在for_each循环中执行此操作:
std::for_each(methods.begin(), methods.end(),
std::transform (list.begin(), list.end(), list.begin() , varFromForEach));
我的问题是我不知道如何从for_each循环中的for_each循环访问变量,例如Kotlin中的it
或scala中的_
有人可以帮我吗?谢谢!
答案 0 :(得分:2)
您尝试在std::transform
来电中致电 std::for_each
。
而是创建一个lambda,捕获list
并将std::for_each
(std::function
对象)中的值作为参数,并在lambda中调用std::transform
:
std::for_each(methods.begin(), methods.end(),
[&list](std::function<int(int)>& f)
{
std::transform(list.begin(), list.end(), list.begin(), f);
});
您当然可以使用range-based for
loop:
for (auto& f : methods)
{
std::transform(list.begin(), list.end(), list.begin(), f);
}