C ++ List迭代和擦除

时间:2017-02-27 17:01:34

标签: c++ list c++11 erase

编辑:这个问题特指std :: lists - Stack Overflow上的其他类似问题请参考std :: vectors

我正在使用C ++,并且在迭代它时无法从std :: list中删除元素。我有一个自定义类的列表(为了这个问题,'对象'),我的代码如下所示:

for(auto i : Objects)
    if(i.EraseFlag == true)
        {
            i = Objects.erase(i);
        }

我收到错误:'没有匹配函数来调用std :: list :: erase(Object&)'

我认为这是正确的方法(从C ++ 11开始)迭代列表,擦除元素并返回考虑擦除的迭代器,但显然我做错了。以前使用向量时我会使用'Objects.erase(Objects.begin()+ i)',而i是for循环中的整数,但考虑到列表的访问要求,这将不起作用。

帮助表示赞赏。

由于

1 个答案:

答案 0 :(得分:1)

成员函数<category> <pattern> * <set>subject</set> <set>verb</set> * <set>object</set> </pattern> <template> <random> <li>I like <star index="2"/>s</li> <li>I hate <star index="2"/>s</li> </random> </template> </category> 处理迭代器。

对于这样的任务,使用普通的for循环是正确的。例如

erase

另一种方法是使用成员函数for ( auto it = Objects.begin(); it != Objects.end(); ) { if ( it->EraseFlag ) it = Objects.erase( it ); else ++it; } 。例如

remove_if