我正在尝试使用STL中的列表来实现插入排序。我收到此错误(我在哪里获得注释)。如何解决此错误并使插入排序工作。任何帮助将不胜感激!
void insertion_sort(list<int> &li) {
int i, j, key;
bool insertionNeeded = false;
list<int>::iterator itr = li.begin();
for (j = 1; j < li.size(); j++) {
advance(itr, j);
key = *itr;
insertionNeeded = false;
for (i = j - 1; i >= 0; i--) { // larger values move right
advance(itr, i);
if (key < i) {
advance(itr, i + 1);
int temp1 = *itr;
advance(itr, i);
int temp2 = *itr;
temp1 = temp2;
insertionNeeded = true;
}
else
break;
}
if (insertionNeeded)
advance(itr, i + 1);
*itr = key; //i get an error here
}
}
答案 0 :(得分:0)
itr
在代码中前进了五倍。
advance(itr, j); //first for loop, j can be equal to li.size()-1
advance(itr, i); //second for loop, i can be equal to j-1
advance(itr, i + 1); //first if conditional, i can be equal to j-1
advance(itr, i); //first if conditional, i can be equal to j-1
advance(itr, i + 1); //second if conditional, i can be equal to j-1
多次迭代该迭代器最终将导致增加一个不可递增的迭代器(过去的迭代器)。根据{{3}},这导致未定义的行为。