gpt4 book ai didi

c++ - 从 C++ std::vector 中删除元素

转载 作者:可可西里 更新时间:2023-11-01 18:40:26 25 4
gpt4 key购买 nike

在遍历 C++ vector 时从中删除元素的正确方法是什么?我正在遍历一个数组并想删除一些符合特定条件的元素。有人告诉我在遍历期间修改它是一件坏事。

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

编辑:

这是我的代码片段。


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 <code>bool (RoutingProtocolImpl::)(RoutingProtocolImpl::dv_entry*)' does not match</code>bool (RoutingProtocolImpl::<em>)(RoutingProtocolImpl::dv_entry</em>)'

抱歉,我是 C++ 新手。

最佳答案

vector 的erase()方法返回可用于继续迭代的新迭代器:

std::vecor<MyClass> v = ...;
std::vecor<MyClass>::iterator it = v.begin();
while (it != v.end()) {
if (some_condition(*it)) {
it->cleanup(); // or something
it = v.erase(it);
}
else {
++it;
}
}

关于c++ - 从 C++ std::vector 中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2642509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com