簡體   English   中英

列表迭代器不可遞增

[英]List iterator is not incrementable

我對 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迭代器而不是再次遞增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());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM