4

重複の可能性:
範囲ベースの for ループ内でコンテナーから要素を消去する

これと同様にfor( auto item : list )、新しい構文を使用して反復しながら STL リストから削除できますか?

ここに完全な例があります (これはクラッシュします!)

#include <list>
using namespace std ;

int main()
{
  list<int> li;
  li.push_back( 4 ) ;
  li.push_back( 5 ) ;
  li.push_back( 6 ) ;
  for( auto num : li )
  {
    if( num == 5 )
      li.remove( num ) ;
    else
      printf( "%d\n", num ) ;
  }
}
4

2 に答える 2

5

いいえ、あなたがすることはできません。li.remove(num)間違って使用し、内部 for ループ イテレータが無効になっているため、例がクラッシュします。

li.remove(num)ループではなく、スタンドアロンのステートメントとして使用する必要があります。リスト メンバー関数removeは、リストのすべての要素を反復処理し、値に等しい要素を削除します。

于 2012-12-09T21:01:57.657 に答える
-5

コードをコンパイラに入力して、それが機能するかどうかを確認します。

于 2012-12-09T22:08:13.510 に答える