列表迭代器不可递增

问题描述

我对 C++ 有点生疏,我正在回归它以变得更好。我已经在 StackOverflow 上搜索了一些无济于事。我遇到的问题是“列表迭代器不可增加”。下面是我认为是罪魁祸首的部分,因为这是我使用带修饰符的迭代器的唯一位置。

  if (!io_queue.empty()) {
        for (list<Process>::iterator it = io_queue.begin(); it != io_queue.end(); ++it) {
            if (it->isBurstDone()) {
                if (it->isComplete()) {
                    it->setExit(clock);
                    complete.push_back(*it);
                    it = io_queue.erase(it);
                }
                else {
                    ready_queue.push_back(*it);
                    it = io_queue.erase(it);
                }
            }
            else {
                it->decBurst();
            }
        }
    }  

解决方法

您在每次循环迭代中都无条件地递增 it。但是当调用 erase() 时,它会返回一个新的迭代器到被擦除后的下一个列表元素,因此如果这导致 it 被设置为 end 迭代器而不是递增 { {1}} 再次是未定义行为

只需将 it++it 语句移动到循环内的 for 块。

试试这个:

else