如何在int类型的向量中使用lambda?

时间:2013-09-08 15:53:39

标签: c++ lambda

我有一个矢量:

std::vector<int> graphPred(tot_lines);

我设置了各种值,但是当输入完成后,我想消除我尝试的空单元格:

graphPred.erase(std::remove_if(graphPred.begin(), graphPred.end(),
                [](const int graphPred){return graphPred.empty();}),
            graphPred.end());

但编译器抱怨“表达式必须是类类型” 我的语法或其他方法是否存在实现目标的问题?

3 个答案:

答案 0 :(得分:3)

“是的,他们是0”

所以使用这个:

  graphPred.erase(std::remove_if(graphPred.begin(), graphPred.end(),
                    [](const int x){return x==0;}),
                graphPred.end());

你的lambda函数

[](const int graphPred){return graphPred.empty();}

empty上使用int,这是错误的,会在类上调用成员函数,这就是错误的全部内容

答案 1 :(得分:1)

你所写的内容没有意义:const int graphPred“遮蔽”外面的graphPred(无论如何都不会被捕获,因为方括号是空的)。它会在empty上调用int来触发您看到的错误。

此外,如果graphPredempty(),则没有什么可以从中删除,所以你需要在lambda中使用某种有意义的逻辑表达式。

这应该有效 - 它将从向量中删除所有偶数:

graphPred.erase(
    std::remove_if(
        graphPred.begin()
    ,   graphPred.end()
    ,   [](const int n){return n % 2 == 0;}
    )
,   graphPred.end()
);

这是demo on ideone

答案 2 :(得分:0)

你将lambda解释为:

[](const int graphPred){return graphPred.empty();}

所以graphPred是一个const int而不是一个类。你无法加入graphPred.empty()