列表迭代器不可递增

List iterator is not incrementable

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

  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() 被调用时,它 returns 一个新的迭代器指向被删除的列表元素之后的下一个元素,因此如果这导致 it 被设置为 end迭代器而不是再次递增 it未定义的行为.

只需将 ++itfor 语句移动到循环内的 else 块。

试试这个:

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