用c ++混合每个和lambdas

时间:2011-04-12 12:40:45

标签: lambda foreach c++11

我想在lambdas和C ++ 0x中为每个(基于范围的for循环,而不是STL for_each)播放一些内容。所以我去了wiki并尝试使用lambdas重写wiki的例子:

    std::vector<int> some_list;
some_list.push_back(42);
some_list.push_back(37);
int total = 0;
int value = 5;
for(int& x:some_list)
{
    [](int x)
    {
        cout << "xL=" <<x <<endl;
    };
}

for(auto x:some_list)
    cout<< "x="<<x<<endl;

    return result;
}

问题是我在lambda版本中没有看到任何cout,因为每个版本都很好地打印x ...我认为不可能为每个和lambdas混合,因为lambdas只能代替“功能“,不能充当循环体,但我不确定,所以如果有人能证实它会很酷

编译器:GCC 4.6

3 个答案:

答案 0 :(得分:4)

你应该在lambda本身上调用operator()。

for(int& x:some_list)
{
    [](int x)
    {
        cout << "xL=" <<x <<endl;
    }(x);  //notice the "()"
}

答案 1 :(得分:3)

在第一个“for”中,你只创建lambda函数,而不是调用它。

实际上lambda函数在这里似乎没什么用处 - 你可能只是编写代码。但是,如果您仍想使用lambda,请在“()”之后添加“}”。

它在另一种情况下很有用 - 使用std::for_each时。

答案 2 :(得分:2)

你正在使用一个普通的for循环,它不期望一个lambda。花括号只是一个代码块,所以你要做的是为每次迭代定义lambda但不调用它。

您要做的是使用std::for_each