尝试从列表中删除元素时“列出迭代器不兼容”

时间:2012-04-05 08:32:10

标签: 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; 
}

我正在尝试从类实例变量员工中删除一些员工,然后返回一个新列表,只包含已删除的emeployees。当我尝试运行程序时,它会从标题中给出错误。我知道它与擦除和push_back有关,但我无法弄明白。

1 个答案:

答案 0 :(得分:10)

变化:

employees.erase(it); 

为:

it = employees.erase(it); 

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

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