条件にマッチする要素を順に検索して削除すると、削除したときに iterator が無効になる。
vector なら、erase() が削除後に有効な次の要素への iterator を返してくれるので、
for (std::vector
if ( condition )
i = v.erase(i);
else
i++;
}
map だと、iterator を返してくれないので、
for (std::map
if (condition)
v.erase(i++);
else
i++;
}
のようにすればよい。両方とも for の () の、最後を空欄にするのがポイントですな。