从C std :: vector中删除元素

前端之家收集整理的这篇文章主要介绍了从C std :: vector中删除元素前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在迭代过程中从C矢量中删除元素的正确方法是什么?我正在迭代一个数组,并希望删除一些符合特定条件的元素.我被告知在遍历期间修改它是一件坏事.

我想我还应该提一下,这是一个指针数组,我需要在删除之前释放它们.

编辑:

所以这是我的代码片段.

void RoutingProtocolImpl::removeAllInfinity()
{
  dv.erase(std::remove_if(dv.begin(),dv.end(),hasInfCost),dv.end()); 
}

bool RoutingProtocolImpl::hasInfCost(RoutingProtocolImpl::dv_entry *entry)
{
  if (entry->link_cost == INFINITY_COST)
  {
    free(entry);
    return true;
  }
  else
  {
    return false;
  }
}

编译时我收到以下错误

RoutingProtocolImpl.cc:368: error: argument of type bool (RoutingProtocolImpl::)(RoutingProtocolImpl::dv_entry*)' does not matchbool (RoutingProtocolImpl::)(RoutingProtocolImpl::dv_entry)'bool (RoutingProtocolImpl::)(RoutingProtocolImpl::dv_entry*)' does not match

对不起,我有点像C newb.

解决方法

bool IsEven (int i) 
{ 
  return (i%2) == 0; 
}

//...

std::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.erase(std::remove_if(v.begin(),v.end(),IsEven),v.end()); 
//v now contains 1 and 3

猜你在找的C&C++相关文章