我有一张在全局记忆中定义的地图。 我正在迭代它,让我们说我在第三个元素。现在我正在调用另一个在同一个地图上生成自己的迭代器的函数,但它可能会删除地图中的第4个或第5个......元素。 我的问题是,当我从该函数返回并继续迭代地图时(我提醒你我在第3个元素中),我的迭代器可以无效还是安全?
抱歉,我无法附上非常长的代码。感谢
编辑: 我的问题是这样的:
map<string,string> mapi;
void er() {
mapi.erase("t");
}
int main() {
mapi.insert(pair<string,string>("w","a"));
mapi.insert(pair<string,string>("e","a"));
mapi.insert(pair<string,string>("r","a"));
mapi.insert(pair<string,string>("t","a"));
mapi.insert(pair<string,string>("A","a"));
mapi.insert(pair<string,string>("u","a"));
mapi.insert(pair<string,string>("C","a"));
map<string,string>::iterator it;
for (it=mapi.begin(); it!=mapi.end(); it++) {
cout << it->first << endl;
if (it->first=="t")
er();
}
}
在这种情况下我擦除相同的元素 - valgrind说它是一个错误。但是,当我删除其他元素时,它似乎工作正常。
答案 0 :(得分:7)
来自http://www.sgi.com/tech/stl/Map.html:
也从地图中删除元素 不会使任何迭代器失效, 当然,除了迭代器之外 实际上指向的元素 被删除。