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)不应在循环中使用,而应作为独立语句使用。List 成员函数remove遍历列表的所有元素并删除等于 value 的元素。

于 2012-12-09T21:01:57.657 回答
-5

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

于 2012-12-09T22:08:13.510 回答