使用C++ 11迭代语法时从STL列表中删除

bob*_*obo 4 c++ for-loop c++11

可能重复:
在基于范围的for循环内擦除容器中的元素

与此类似,您可以在使用新for( auto item : list )语法迭代STL列表时从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 ) ;
  }
}
Run Code Online (Sandbox Code Playgroud)

Leo*_*sky 5

你不能.您的示例崩溃,因为您使用li.remove(num)不正确并且内部for循环迭代器无效.

li.remove(num)不应该在循环中使用,而应作为独立的语句使用.列表成员函数remove遍历列表的所有元素,并删除等于值的元素.