C++ 列表迭代和擦除

C++ List Iteration and erasing

编辑:这个问题专门指 std::lists - Stack Overflow 上的其他类似问题指的是 std::vectors

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

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

我收到错误:'no matching function for call to std::list::erase(Object&)'

我相信这是迭代列表、擦除元素和 return 考虑擦除的迭代器的正确方法(从 C++11 开始),但显然我正在做一些事情错误的。以前在使用向量时,我会使用 'Objects.erase(Objects.begin() + i)',其中 i 是 for 循环中的一个整数,但考虑到列表的访问要求,这将不起作用。

感谢帮助。

谢谢

成员函数erase处理迭代器。

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

for ( auto it = Objects.begin(); it != Objects.end(); )
{
    if ( it->EraseFlag ) it = Objects.erase( it );
    else ++it;
}

另一种方法是使用成员函数remove_if。例如

Objects.remove_if( []( const auto &value ) { return value.EraseFlag; } );