【发布时间】:2010-04-15 03:17:04
【问题描述】:
在遍历 C++ 向量时,从 C++ 向量中删除元素的正确方法是什么?我正在迭代一个数组并想要删除一些符合特定条件的元素。有人告诉我,在遍历期间修改它是一件坏事。
我想我还应该提到这是一个指针数组,我需要在删除它们之前释放它们。
编辑:
所以这是我的代码的 sn-p。
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)'
对不起,我是一个 C++ 新手。
【问题讨论】:
-
不应该使用
delete而不是free吗?free是一种 C 机制,不应与 Object 代码混淆。 -
此外,如果您有
vector<T*>并且vector 拥有对象的所有权,请考虑改用boost::ptr_vector<T>,这样您就可以确保不会泄漏;) 接口非常相似到vector<T>,它只是提供对指针和所有权的处理。 -
@garsh0p:这和你之前的问题 (stackoverflow.com/questions/2642671/…) 几乎相同(看起来是复制和粘贴的)。请不要那样做。如果您想为某个问题添加更多详细信息,请编辑您现有的问题,或者只是为您的问题添加评论。
-
@Evan Teran:下面的 Brian R. Bondy 告诉我要创建一个新问题...