gpt4 book ai didi

c++ - 在具有相同 C++ 代码的跨平台之间获取运行时错误

转载 作者:搜寻专家 更新时间:2023-10-31 00:30:01 25 4
gpt4 key购买 nike

我正在使用以下在 Linux 下完美运行的代码从 C++ 多重映射中删除元素,但抛出表达式集/映射在 Windows 上不可递增。

void delete_entries(multimap<int, pair<int, int> > &m, int i, int j) {
// This function deletes entries from multimap where box number == i and Ball index ==j

multimap<int, pair<int, int> > ::iterator it = m.begin();
while (it != m.end()) {
if ((*it).second.first == i || (*it).second.second == j)
m.erase(it);
it++;
}
}

最佳答案

while (it != m.end()) {
if ((*it).second.first == i || (*it).second.second == j)
m.erase(it);
it++; //if the previous condition holds true, 'it' is invalidated
}

删除的迭代器变得无效。递增无效的迭代器是未定义的行为。

未定义的行为意味着即使它看似有效,也无法保证整个程序的行为。 (这也适用于在 Linux 中看似正常工作的那个;你应该很高兴它在 MSVC 上崩溃了)

有关删除的正确方法,请参阅此处的其他答案和此问题:How to remove from a map while iterating it?

关于c++ - 在具有相同 C++ 代码的跨平台之间获取运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38567478/

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