* vector [#kb8e35d2] ** eraseの使い方 [#q67e9506] eraseを使用するときは以下のように書く。 std::vector::iterator it = v.begin(); while ( it != v.end(); ){ if ( 条件 ) it = v.erase(it); else it++; <--ここにit++;を入れてはいけない。 } eraseは削除後に有効な次の要素への iterator を返す。 なのでwhileの最後でインクリメントすると1つ要素をスキップしてしまう。 ちなみに以下もよさそうだが危ういとのこと。 for (int i=0;i<(int)v.size();++i){ if ( 条件 ) { v.erase(i); --i; } T君のコードはこうなっていてダメなときと大丈夫なときがある。 どういうときにダメなのかまだ理解できていない。。。