我有一个示例程序,想要查看在从地图中删除元素时,迭代器如何失效。
程序如下:
#include <iostream>
#include <map>
using namespace std;
int main(int argc, char *argv[])
{
map<int, int> myMap;
myMap.insert(pair<int, int>(0, 2));
myMap.insert(pair<int, int>(1, 4));
myMap.insert(pair<int, int>(3, 18));
myMap.insert(pair<int, int>(2, 20));
map<int, int>::iterator it;
for(it = myMap.begin(); it != myMap.end(); ++it)
{
myMap.erase(it); // erasing the element pointed at by iterator
cout << it->first << endl; // iterator is invalid here
}
return 0;
}
问题是我得到的输出是:
0
1
2
3
为什么迭代器没有失效并且给出了错误的结果。非常感谢您提供任何帮助。
C++ STL maps的文档说明:对已经删除的元素的引用和迭代器将会失效,而其他引用和迭代器则不受影响。