C++ 我使用国际热核聚变实验堆交换方法c+有什么错+;?

C++ 我使用国际热核聚变实验堆交换方法c+有什么错+;?,c++,iterator,C++,Iterator,实现一个基本的冒泡排序,按名称对学生结构的向量进行排序 #include <vector> #include <string> void sortStudents(std::vector<Student>& students) { typedef std::vector<Student>::iterator iter; for (iter i = students.begin(); i != students.end(

实现一个基本的冒泡排序,按名称对学生结构的向量进行排序

#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));
            }
        }
    }
}
#包括
#包括
无效排序学生(标准::向量和学生){
typedef std::vector::iterator iter;
for(iter i=students.begin();i!=students.end()-1;++i){
for(iter j=i;j!=students.end()-1;++j){
学生电流=*i;
下一个学生=*(i+1);
bool shouldSwap=((next.name).compare(current.name))<0;//如果字母表中next在current之前
如果(应交换){
标准:国际热核聚变实验堆交换(*i,*(i+1));
}
}
}
}
我是否完全错了这种方法,或者我遗漏了一些基本的东西

注意:我知道冒泡排序的低效性,我只是想了解迭代器。

是一个特殊的版本(不同于交换实际元素),它交换元素,迭代器指向。但是您尝试将实际元素传递给它。因此,要么:

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


顾名思义,
std::iter\u swap
使用迭代器——您将取消对迭代器的引用并传递值。
std::iter_swap(i, i + 1);