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/