0

我有一个向量:

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

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

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

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

4

3 回答 3

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();}

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

于 2013-09-08T16:02:06.257 回答
1

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

此外, if graphPredis empty(),没有什么可以删除的,所以你需要在你的 lambda 表达式中加入某种有意义的逻辑表达式。

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

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

这是关于 ideone 的演示

于 2013-09-08T16:02:07.320 回答
0

您将 lambda 清除为:

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

graphPredconst int 不是类也是如此。你不能打电话graphPred.empty()

于 2013-09-08T16:04:36.207 回答