相关疑难解决方法(0)

你可以在迭代它时从std :: list中删除元素吗?

我有代码看起来像这样:

for (std::list<item*>::iterator i=items.begin();i!=items.end();i++)
{
    bool isActive = (*i)->update();
    //if (!isActive) 
    //  items.remove(*i); 
    //else
       other_code_involving(*i);
}
items.remove_if(CheckItemNotActive);
Run Code Online (Sandbox Code Playgroud)

我想在更新后立即删除非活动项目,以避免再次走过列表.但是如果我添加注释掉的行,当我到达时会出现错误i++:"List iterator not incrementable".我尝试了一些替代品,它们没有在for语句中增加,但我无法得到任何工作.

当你走std :: list时,删除项目的最佳方法是什么?

c++ list std

233
推荐指数
7
解决办法
21万
查看次数

不擦除std :: list :: iterator会使迭代器失效并破坏对象吗?

为什么以下打印2

list<int> l;
l.push_back( 1 );
l.push_back( 2 );
l.push_back( 3 );
list<int>::iterator i = l.begin();
i++;
l.erase( i );
cout << *i;
Run Code Online (Sandbox Code Playgroud)

我知道什么erase回归,但我想知道为什么这样可以?或者它是未定义的,还是依赖于编译器?

c++ stl list erase

5
推荐指数
1
解决办法
1265
查看次数

标签 统计

c++ ×2

list ×2

erase ×1

std ×1

stl ×1