gpt4 book ai didi

C++:调用删除后删除的元素仍在集合中

转载 作者:太空宇宙 更新时间:2023-11-04 15:21:12 25 4
gpt4 key购买 nike

我得到了这样的代码:

for (set<GROUP*>::iterator i = Data.m_Resulting.begin(); i != Data.m_Resulting.end();)
{
printf("Deleting %d\n", (*i)->nId);
Data.m_MpptPool.erase(i++);
}

printf("Remains in pool: %d\n", Data.m_MpptPool.size());

// Dump Pool:

for (set<GROUP*>::iterator i = Data.m_MpptPool.begin(); i != Data.m_MpptPool.end(); i++)
{
printf("\t %d\n", (*i)->nId);
}

如果在删除之前集合中有 2 个对象,并且第一个循环删除了其中一个,则 .size() 函数显示正确的数字 (1)但是,打印我的集合内容的第二个 for 循环显示了其中的两个元素。稍后,引用此元素会导致段错误。这可能是什么问题?

最佳答案

您不能在另一个 std::set (m_MpptPool )。这是未定义的行为,您需要使用值:

Data.m_MpptPool.erase(*it++);

关于C++:调用删除后删除的元素仍在集合中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18835532/

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