我有一個在全局內存中定義的地圖。 我在重複它,假設我在第三個元素。現在我調用另一個在同一個地圖上生成自己的迭代器的函數,但是它可能會擦除地圖中的第4或第5個元素。 我的問題是,當我從該函數返回並繼續迭代地圖(我提醒你我在第三個元素)時,我的迭代器可能無效或安全嗎?遍歷地圖並調用刪除其他元素的函數就是地圖
對不起,我不能附加代碼,它是非常非常長。
感謝
編輯: 我的問題是這樣的:
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的說,它的錯誤。但是,當我刪除其他元素似乎工作正常。
創建一個簡單的用例並對其進行測試。 – Xeo 2011-06-05 12:31:21
@Xeo:這不會*保證*它是安全和定義的。 – 2011-06-05 12:33:12
我創造了很簡單的東西。似乎工作,但我只想要其他人的意見只是爲了確保 – 2011-06-05 12:33:43