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

为什么 `it1++` 有效,但 `it1=it1+1` 无效,其中 it1 是列表容器的迭代器

给定一个std::list名为 的迭代器itit1++相当于it1=it1+1。那么为什么it1++工作正常,但it1=it1+1在下面的代码中却出现错误呢?

代码

#include <iostream>
#include <list>

int main()
{
    std::list<int> l1{19, 2, 3, 21, 5, 19, 7, 11};
    std::list<int>::iterator it1;

    std::cout << "1st\n";
    it1 = l1.begin();
    it1++;
    it1 = it1 + 1; // This giving error
}
Run Code Online (Sandbox Code Playgroud)

输出

Invalid operands to binary expression
 ('std::list<int>::iterator' (aka '_List_iterator<int>') and 'int')
Run Code Online (Sandbox Code Playgroud)

c++ iterator stl list

11
推荐指数
1
解决办法
330
查看次数

标签 统计

c++ ×2

list ×2

iterator ×1

std ×1

stl ×1