c++ - 尝试从列表中删除元素时出现 "List iterators incompatible"

标签 c++ list iterator

list<employee> remove_employees(const string& name,
                                const string& lastname) 
{
    list<employee> listOfRemoved; 
    list<employee>::iterator it; 

    for(it=employees.begin(); it != employees.end(); )
    {
        if(it->get_name() == name && it->get_lastname() ==lastname) 
        {
            listOfRemoved.push_back(*it); 
            employees.erase(it); 
        }
        else
            it++;
    }

    return listOfRemoved; 
}

我试图从类实例变量 employees 中删除一些员工,然后返回一个新列表,其中只有删除的员工。当我尝试运行该程序时,它给出了标题中的错误。我知道它与删除和 pushing_back 有关,但我就是想不通。

最佳答案

改变:

employees.erase(it); 

到:

it = employees.erase(it); 

否则在循环的下一次迭代中, 将引用一个无效元素。 list::erase()返回最后一个删除元素之后的迭代器。

[我将标题解释为编译器错误,而不是运行时错误。]

关于c++ - 尝试从列表中删除元素时出现 "List iterators incompatible",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10025195/

相关文章:

c++ - 如何 "inherit"来自 STL 类的迭代器?

c++ - Thrust:对另一个数组索引的数组元素求和【Matlab的语法 sum(x(indices))】

c++处理irc bot的recv函数中的多个字符串

java - Java 中的 List 或 ArrayList 声明有何不同?

列表addAll抛出错误:Unhandled Exception: Concurrent modification during iteration:

c++ - 链表中的节点可以有指向自身的指针吗? C++

c++ - 将 lambda 函数传递给通用函数 C++

c++ - 将 String(同一内存)用于 Map 索引和 Object 名称

带有索引参数的java迭代器

c++ - 如果 X 是某个有序容器 S 的迭代器 S.begin(),则 prev(X) 是什么,例如S是集合?