Что я делаю неправильно, используя метод iter_swap c ++? - PullRequest
0 голосов
/ 09 ноября 2018

Реализация базовой пузырьковой сортировки для сортировки моего вектора структур Студента по имени.

#include <vector>
#include <string>

void sortStudents(std::vector<Student>& students) {

    typedef std::vector<Student>::iterator iter;

    for (iter i = students.begin(); i != students.end()-1; ++i) {
        for (iter j = i; j != students.end() - 1; ++j) {

            Student current = *i;
            Student next = *(i + 1);

            bool shouldSwap = ((next.name).compare(current.name)) < 0; // if next is before current in the alphabet

            if (shouldSwap) {
                std::iter_swap(*i, *(i + 1));
            }
        }
    }
}

Я совершенно не прав с этим подходом или я упускаю что-то базовое?

Примечание: я знаю неэффективность пузырьковой сортировки, я просто пытаюсь понять итераторы.

1 Ответ

0 голосов
/ 09 ноября 2018

std::iter_swap - это специальная версия (отличная от std::swap, которая меняет фактические элементы), которая меняет элементы, на которые указывают итераторы. Но вы пытаетесь передать фактические элементы к нему. Так что либо:

std::swap(*i, *(i + 1));

или

std::iter_swap(i, i + 1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...