我有一个矢量:
std::vector<int> graphPred(tot_lines);
我设置了各种值,但是当输入完成后,我想消除我尝试的空单元格:
graphPred.erase(std::remove_if(graphPred.begin(), graphPred.end(),
[](const int graphPred){return graphPred.empty();}),
graphPred.end());
但编译器抱怨“表达式必须是类类型” 我的语法或其他方法是否存在实现目标的问题?
答案 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
来触发您看到的错误。
此外,如果graphPred
是empty()
,则没有什么可以从中删除,所以你需要在lambda中使用某种有意义的逻辑表达式。
这应该有效 - 它将从向量中删除所有偶数:
graphPred.erase(
std::remove_if(
graphPred.begin()
, graphPred.end()
, [](const int n){return n % 2 == 0;}
)
, graphPred.end()
);
答案 2 :(得分:0)
你将lambda解释为:
[](const int graphPred){return graphPred.empty();}
所以graphPred
是一个const int而不是一个类。你无法加入graphPred.empty()