编辑:这个问题特指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循环中的整数,但考虑到列表的访问要求,这将不起作用。
帮助表示赞赏。
由于
答案 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