gpt4 book ai didi

c++ - 映射/迭代器增量错误

转载 作者:行者123 更新时间:2023-11-28 02:11:13 25 4
gpt4 key购买 nike

以下代码抛出调试断言映射/迭代器增量错误..

void ClassA::Remove()
{
std::map<int, CVClassB*>::iterator it(m_p.begin());
while ( it != m_p.end() )
{
if (it->first >= 0)
{
m_p.erase(it);
it++;
}
}
}

你能告诉我错误是什么吗

最佳答案

std::map::erase使它操作的迭代器无效。所以之后增加它是不安全的。但是 erase() 确实会为您返回下一个迭代器:

it = m_p.erase(it);

此外,您只在 if 中增加 it,所以除非 all 键是 >=0,你会陷入死循环。你可能想要这样的东西:

// delete all keys >= 0
if (it->first>=0) {
it = m_p.erase(it); // erase and increment
}
else {
++it; // just increment
}

此外,正如 Vlad 的回答暗示的那样,谁管理 CVClassB* 的生命周期?您需要删除吗?为什么要使用指针,您可以直接将值存储在 map 中。 (或使用 smart pointer )。

关于c++ - 映射/迭代器增量错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35598244/

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