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)
你不能.您的示例崩溃,因为您使用li.remove(num)不正确并且内部for循环迭代器无效.
li.remove(num)不应该在循环中使用,而应作为独立的语句使用.列表成员函数remove遍历列表的所有元素,并删除等于值的元素.