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



可能的重复项:
在基于范围的 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( "%dn", num ) ;
  }
}

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

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

我只是将您的代码输入编译器,看看它是否有效。

最新更新