结论:不同的环境下表现是不一样的。
#include <bits/stdc++.h>
using namespace std;
int main()
{
map<int,int> mp;
mp[1] = 1;
mp[2] = 2;
mp[3] = 3;
auto it = mp.find(1);
mp.erase(it);
cout << it->second << endl;
//Mac homebrew安装的g++ 11.2.0 :1
//TDM-GCC 4.9.2/9.2.0直接运行 :1
//TDM-GCC 4.9.2/9.2.0使用调试 :一个随机数
//leetcode c++(clang11 C++17) :运行时错误
//codeforces GNU C++14/G++17 :1
++it;
cout << it->second << endl;
//Mac homebrew安装的g++ 11.2.0 :2
//TDM-GCC 4.9.2/9.2.0直接运行 :一个随机数
//TDM-GCC 4.9.2/9.2.0使用调试 :在上方的++it处发生运行时错误,无法继续调试
//leetcode c++(clang11 C++17) :2(注释上方发生RE的cout代码)
//codeforces GNU C++14/G++17 :一个随机数
}
看来不能寄希望于it在进行删除操作后还能正常工作,得老老实实写erase(it++)。
本文探讨了在不同编译环境下,C++中map容器迭代器在元素删除后的行为差异。通过一个示例程序展示了在多种编译器配置下,迭代器在删除元素后的表现不一致现象,并总结出删除元素后不应再依赖原有迭代器的结论。
3万+

被折叠的 条评论
为什么被折叠?



