[英]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
是未定義的行為。
只需將++it
從for
語句移動到循環內的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.