实施基本的冒泡排序,以按名称对我的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));
}
}
}
}
我完全不赞成这种方法吗?还是我缺少基本知识?
注意:我知道冒泡排序的效率低下,我只是想了解迭代器。
答案 0 :(得分:3)
std::iter_swap
是一个特殊版本(与交换实际元素的std::swap
不同),它交换迭代器指向的元素。但是您尝试将实际元素传递给它。就是这样:
std::swap(*i, *(i + 1));
或
std::iter_swap(i, i + 1);