我有一个在全局内存中定义的 map 。 我正在迭代它,假设我在第三个元素中。现在我正在调用另一个函数,它在同一个 map 上生成自己的迭代器,但它可能会删除 map 中的第 4 或第 5 ... 元素。 我的问题是,当我从该函数返回并继续遍历 map 时(我提醒你我在第 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 说这是一个错误。然而,当我删除其他元素时,它似乎工作正常。
最佳答案
来自 http://www.sgi.com/tech/stl/Map.html :
Erasing an element from a map also does not invalidate any iterators, except, of course, for iterators that actually point to the element that is being erased.
关于c++ - 迭代 map 并调用删除其他元素的函数是 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6242904/