c++におけるmapの正確な遍歴
エラー1:
エラー2:
正しいコード:
PS:大神のコードを参考にして、とても効果的だと感じて、贴ってみんなと一绪に転載住所を分かち合います:c++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;
}
:
i , for mapData.end() , 。
エラー2:
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;
}
。i++ :
1, i ;
2, i 1;
3, i。
:
mapData.earse(i); //earse ,i , i++;
i++; earse i , i 。
正しいコード:
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;
}
:
mapData.erase(i++); :
map<string, string>::iterator iterTemp = i;
++ i;
mapData.earse(iterTemp);
earse ,i 1 ,earse i , 1 i 。
PS:大神のコードを参考にして、とても効果的だと感じて、贴ってみんなと一绪に転載住所を分かち合います:c++mapの遍歴削除について