3
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に関係があることは知っていますが、理解できません。

4

1 に答える 1

11

変化する:

employees.erase(it); 

に:

it = employees.erase(it); 

そうしないと、ループの次の反復でit無効な要素が参照されます。list::erase()最後に削除された要素に続く反復子を返します。

[タイトルは実行時エラーではなくコンパイラ エラーと解釈しました。]

于 2012-04-05T08:53:10.817 に答える