list iter не разыменовываемая вставка сортировки с использованием списков - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь реализовать сортировку вставки, используя список в 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
}
}

1 Ответ

0 голосов
/ 15 октября 2018

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

Многократное продвижение итератора в конечном итоге приводит к увеличению неинкрементируемого итератора (итератор за окончанием конца).Это приводит к неопределенному поведению согласно документации .

...