列表迭代器不可递增

6 c++ iterator stl list

我有一个使用visual studio 2003构建的旧项目,最近我用vs2005重新编译了它.但是,在运行时,我收到以下错误:

列表迭代器不可递增

我跟踪程序到这个函数:

void InputQueue::update()
{
    list<PCB>::iterator iter;
    list<PCB>::iterator iterTemp;
    for(iter = begin(); iter != end(); iter++)
    {
        if(iter->arrivalTime == 0)
        {           
            ReadyQueue::getInstance()->add(*iter);
            iterTemp = iter;
            iter++;
            erase(iterTemp);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我不是C++专家,这就是VS调试器给我的.有人可以向我解释问题是什么吗?

谢谢

Mar*_*ram 14

我会重新编写你的循环,如下所示:

while (iter != end())
{
  if (iter->arrivalTime == 0)
  {
    ReadyQueue::getInstance()->add(*iter);
    iter = erase(iter);
  }
  else
  {
    ++iter;
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,您正在循环检查每个索引的列表.


Chr*_*ung 9

请注意,如果iter->arrivalTime == 0,则列表迭代器增加两次:在元素删除之前一次,在循环结束时再次增加.

如果要删除的项目是列表中的最后一项,则显然无法正常工作.我敢说它甚至在VS2003中都没有正常工作,但是VS2005会更好地提醒你.:-)

请记住,迭代过去是未定义的行为end().绝对可能发生任何事情,例如程序崩溃,或(在这种情况下)错误消息.