C++ 列表iter不可撤销的插入排序使用列表

C++ 列表iter不可撤销的插入排序使用列表,c++,c++11,error-handling,C++,C++11,Error Handling,我试图在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++) { advanc

我试图在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
}
}
void插入\u排序(列表和li){
inti,j,key;
bool insertioneded=false;
列表::迭代器itr=li.begin();
对于(j=1;j=0;i--){//较大的值向右移动
预付款(itr,i);
如果(键
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

多次推进迭代器最终会导致递增不可递增的迭代器(超过结束迭代器)。这会导致未定义的行为。

该错误的意思是
itr
不引用列表中的元素,而是等于
li.end()
。这表示代码中存在错误。提示:想想
advance
itr
做了什么。如有必要,请使用调试器。完成此操作后,可能会重复