編集メニュー > 新規作成 編集 コピー 名前の変更 アップロード 添付ファイル一覧 バックアップ

* 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君のコードはこうなっていてダメなときと大丈夫なときがある。
どういうときにダメなのかまだ理解できていない。。。