c++map,mutimap 삭제 문제 분석

1047 단어 mapmutimap
이렇게 삭제 하면 프로그램 메모리 덮어 쓰기 등 일련의 예측 할 수 없 는 bug
 
map<string, string>::iterator iter;
for ( iter = mm.begin();iter != mm.end(); iter ++ )
{
if ( iter->second == something )
{
mm.erase( iter );
}
}
원인 을 초래 할 수 있 습 니 다.erase 가 iter 를 떨 어 뜨 린 후에 iter++를 계속 실행 하면 올 바른 방법 이 혼 란 스 러 워 집 니 다.
 
for (iter = mm.begin();iter != mm.end();)
{
if ( iter->second == something )
{
mm.erase( iter++ );
}
else
{
iter++; // Use Pre Increment for efficiency.
}
}
mm.erase(iter+)를 이해 하지 못 하 는 사람 이 있 을 수 있 습 니 다.사실은 이것 과 같 습 니 다
 
for (iter = mm.begin();iter != mm.end();)
{
if ( iter->second == something )
{
map<string, string>::iterator iter_erase;
iter_erase = iter++ // ++
mm.erase( iter_erase );
}
else
{
iter++; // Use Pre Increment for efficiency.
}
}

좋은 웹페이지 즐겨찾기