当前位置:  开发笔记 > 编程语言 > 正文

列表迭代器不可递增

如何解决《列表迭代器不可递增》经验,为你挑选了2个好方法。

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

列表迭代器不可递增

我跟踪程序到这个函数:

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

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

谢谢



1> Mark Ingram..:

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

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

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



2> Chris Jester..:

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

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

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

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有