如何使用 lambda 擦除空向量单元格?
Posted
技术标签:
【中文标题】如何使用 lambda 擦除空向量单元格?【英文标题】:How to use lambda to erase empty vector cells? 【发布时间】:2013-09-08 07:30:37 【问题描述】:我有一个向量:
std::vector<Edge> edges(num);
最后包含空单元格,我想使用 lambda 将其删除,但当我这样做时:
edges.erase(std::remove_if(edges.begin(), edges.end(),
std::mem_fn(&std::Edge::empty), edges.end() );
我收到了这个错误:
error C2664: 'bool main::<lambda_6f33349b59d49f69703a5fa6a8c5995a>::operator ()(const std::vector<_Ty> &) const' : cannot convert parameter 1 from 'Edge' to 'const std::vector<_Ty> &'
我现在该怎么办?
【问题讨论】:
我认为 std 中没有std::Edge::empty
函数。
【参考方案1】:
如何使用 lambda 擦除空向量单元格?
您只需要提供一个简单的 lambda,如果 Edge
为空,则返回 true:
edges.erase(std::remove_if(edges.begin(),
edges.end(),
[](const Edge& e)return e.empty();),
edges.end() );
这假设Edge
有一个合适的成员函数empty()
:
class Edge
public:
bool empty() const ....
// as before
;
【讨论】:
我尝试了上面的代码,我的编译显示'error C2039 empty is not a member of Edge' @Napalidon 好吧,我从您的原始代码中猜到Edge
有一个 empty
方法,因为您似乎正在尝试调用它。什么方法告诉你Edge
是否为空?
我没有。我该怎么写?只需检查所有实例变量是否为0?而我只是返回真实?或者我可以继承它吗?
@Napalidon 如果你不知道Edge
是空的,那么你不能删除空的Edges
。如果你不知道它们是否为空,那么它们是否是空的应该没有什么区别。您必须弄清楚“空”是什么意思,然后提供一种对其进行测试的方法。
Edge
是您自己定义的类,不是吗?只需编写一个 empty
方法来检查它是否符合您的“空”标准。以上是关于如何使用 lambda 擦除空向量单元格?的主要内容,如果未能解决你的问题,请参考以下文章
lambda()函数如何同时判断两个单元格的值分别满足各自给定值怎么做?