循环遍历 std::map 并删除元素
int main(int argc, char* argv[]){ map<string, string> mapData; mapData["a"] = "aaa"; mapData["b"] = "bbb"; mapData["c"] = "ccc"; for (map<string, string>::iterator i=mapData.begin(); i!=mapData.end(); i++) { if (i->first == "b") { mapData.erase(i); } } return 0;}int main(int argc, char* argv[]){ map<string, string> mapData; mapData["a"] = "aaa"; mapData["b"] = "bbb"; mapData["c"] = "ccc"; for (map<string, string>::iterator i=mapData.begin(); i!=mapData.end(); /*i++*/) { if (i->first == "b") { mapData.erase(i++); } else { i++; } } return 0;}int main(int argc, char* argv[]){ map<string, string> mapData; mapData["a"] = "aaa"; mapData["b"] = "bbb"; mapData["c"] = "ccc"; for (map<string, string>::iterator i=mapData.begin(); i!=mapData.end(); /*i++*/) { if (i->first == "b") { mapData.erase(i/*++*/); } else { /*i++*/; } i++; } return 0;}mapData.erase(i++);
[解决办法]
注意 这是后置++唯一不能拆开写的情况。
mapData.erase(i); //i erase以后 i已经失效,不能再用i++;i++;