C++ 如何使用lambda擦除空向量单元?

C++ 如何使用lambda擦除空向量单元?,c++,c++11,vector,C++,C++11,Vector,我有一个向量: std::vector<Edge> edges(num); 我得到了这个错误: error C2664: 'bool main::<lambda_6f33349b59d49f69703a5fa6a8c5995a>::operator ()(const std::vector<_Ty> &) const' : cannot convert parameter 1 from 'Edge' to 'const std::vector<

我有一个向量:

std::vector<Edge> edges(num);
我得到了这个错误:

error C2664: 'bool main::<lambda_6f33349b59d49f69703a5fa6a8c5995a>::operator ()(const std::vector<_Ty> &) const' : cannot convert parameter 1 from 'Edge' to 'const std::vector<_Ty> &'
错误C2664:'bool main:::运算符()(const std::vector&)const':无法将参数1从'Edge'转换为'const std::vector&'
我现在该怎么办

如何使用lambda擦除空向量单元

您只需要提供一个简单的lambda,如果
边为空,它将返回true:

edges.erase(std::remove_if(edges.begin(), 
                           edges.end(), 
                           [](const Edge& e){return e.empty();}), 
            edges.end() );
这假定
Edge
具有合适的成员函数
empty()

如何使用lambda擦除空向量单元

您只需要提供一个简单的lambda,如果
边为空,它将返回true:

edges.erase(std::remove_if(edges.begin(), 
                           edges.end(), 
                           [](const Edge& e){return e.empty();}), 
            edges.end() );
这假定
Edge
具有合适的成员函数
empty()


我试过上面的代码,我的编译器说‘错误C2039 empty不是Edge的成员’@Napalidon好吧,我从您的原始代码中猜测,
Edge
有一个
empty
方法,因为您似乎试图调用它。如果
为空,有什么方法告诉您?我没有。我该怎么写呢?只需检查所有实例变量是否为0?而我只是返回真实?或者我可以继承它吗?@Napalidon如果你不知道
是空的,那么你就不能删除空的
。如果你不知道它们是否是空的,那么它们是否是空的应该没有区别。你必须弄清楚“空”是什么意思,然后为它提供一种测试方法。
Edge
是你自己定义的类,不是吗?只要写一个
empty
方法来检查它是否符合您的“empty”标准。我尝试了上面的代码,我的编译器说“error C2039 empty不是Edge的成员”@Napalidon好吧,我从您的原始代码猜到
Edge
有一个
empty
方法,因为您似乎正在尝试调用它。如果
为空,有什么方法告诉您?我没有。我该怎么写呢?只需检查所有实例变量是否为0?而我只是返回真实?或者我可以继承它吗?@Napalidon如果你不知道
是空的,那么你就不能删除空的
。如果你不知道它们是否是空的,那么它们是否是空的应该没有区别。你必须弄清楚“空”是什么意思,然后为它提供一种测试方法。
Edge
是你自己定义的类,不是吗?只要写一个
empty
方法来检查它是否符合“空”的标准。我认为std中没有可用的
std::Edge::empty
函数。我认为std中没有可用的
std::Edge::empty
函数。
class Edge
{
 public:

  bool empty() const { .... }

  // as before
};