相关疑难解决方法(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万
查看次数

在基于范围的for循环内擦除容器中的元素

我想从当前在基于范围的for循环中使用的容器中擦除元素.这会导致未定义的行为吗?或者,如果我没有调用,那么elementafter 的下一个值是erase()下一个元素应该是什么erase()

例:

std::map<int, int> someMap;
/* Fill in someMap */
for (auto& element : someMap)
{
    /* ... */
    if ( /* Some condition */ )
        someMap.erase(element.first);
}
Run Code Online (Sandbox Code Playgroud)

c++ for-loop c++11

10
推荐指数
1
解决办法
1548
查看次数

标签 统计

c++ ×2

c++11 ×1

for-loop ×1

list ×1

std ×1