在for_each循环

时间:2018-02-23 09:28:20

标签: c++11 foreach

我的代码看起来像这样:

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中的_
有人可以帮我吗?谢谢!

1 个答案:

答案 0 :(得分:2)

您尝试在std::transform来电中致电 std::for_each

而是创建一个lambda,捕获list并将std::for_eachstd::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);
}