在迭代过程中从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 match
bool (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