标签:
1 #include <iostream> 2 #include <string> 3 #include <map> 4 5 using namespace std; 6 7 int main(int argc, char* argv[]) 8 { 9 map<string, string> mapData; 10 11 mapData["a"] = "aaa"; 12 mapData["b"] = "bbb"; 13 mapData["c"] = "ccc"; 14 15 for (map<string, string>::iterator i = mapData.begin(); i != mapData.end(); ++i) 16 { 17 cout << i->first << ", " << i->second << endl; 18 } 19 cout << "++++++++++++++++++++++++++++++++" << endl; 20 21 for (map<string, string>::iterator i=mapData.begin(); i!=mapData.end(); ++i) 22 { 23 cout << "execute key: " << i->first << endl; 24 if (i->first == "b") 25 { 26 //windows 的STL中,map的erase方法会返回一个iterator,这个iterator指向的是当前被删除的iterator后面的iterator,gcc编译报错 27 i = mapData.erase(i); 28 --i; 29 } 30 } 31 cout << "********************" << endl; 32 for (map<string, string>::iterator i = mapData.begin(); i != mapData.end(); ++i) 33 { 34 cout << i->first << ", " << i->second << endl; 35 } 36 37 return 0; 38 }
1 for (map<string, string>::iterator i=mapData.begin(); i!=mapData.end(); ++i) 2 { 3 cout << "execute key: " << i->first << endl; 4 if (i->first == "b") 5 { 6 // 注意: mapData.erase(i); // erase以后 i已经失效,不能再用i++; 7 8 // linux STL和 windows STL通用的写法 9 // 这段代码的真正等效代码是 10 // map<string, string>::iterator iterTemp = i; 11 // ++i; 12 // mapData.erase(iterTemp); 13 14 // i++操作主要做三件事情: 15 // 1、首先把i备份一下。 16 // 2、把i加上1。 17 // 3、返回第一步备份的i。 18 19 mapData.erase(i++); 20 --i; 21 } 22 }
1 for (map<string, string>::iterator i=mapData.begin(); i!=mapData.end(); ++i) 2 { 3 cout << "execute key: " << i->first << endl; 4 if (i->first == "b") 5 { 6 map<string, string>::iterator tmp = i; 7 ++i; 8 mapData.erase(tmp); 9 --i; 10 } 11 }
标签:
原文地址:http://www.cnblogs.com/itpoorman/p/4433116.html