使用iter_swap方法c ++,我在做什么错?

时间:2018-11-09 13:55:35

标签: c++ iterator

实施基本的冒泡排序,以按名称对我的Student结构进行排序。

#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 :(得分:3)

std::iter_swap是一个特殊版本(与交换实际元素的std::swap不同),它交换迭代器指向的元素。但是您尝试将实际元素传递给它。就是这样:

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

std::iter_swap(i, i + 1);