什么是在遍历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;
}
}
I'm getting the following error when compiling:
RoutingProtocolImpl.cc:368: error: argument of type <code>bool (RoutingProtocolImpl::)(RoutingProtocolImpl::dv_entry*)' does not match</code>bool (RoutingProtocolImpl::<em>)(RoutingProtocolImpl::dv_entry</em>)'
抱歉,我有点 C++ 初学者。
delete
而不是free
吗?free
是C机制,不应与目标代码混淆。 - Matthieu M.vector<T*>
并且该向量拥有这些对象,请考虑改用boost::ptr_vector<T>
,这样您就可以确保不会泄漏。该接口与vector<T>
非常相似,只是在幕后提供指针和所有权处理。 - Matthieu M.