一些问题
为什么向sort传递一对反向迭代器可以实现vector按降序排序?
对于 std::sort 函数而言,它的排序规则默认使用 < 运算符进行比较。这意味着当你传递一对正向迭代器给 sort 函数时,它会比较元素 a 和 b 是否满足 a < b 的条件,如果满足则认为 a 应该排在 b 前面,从而实现升序排序。
当你传递一对反向迭代器给 sort 函数时,例如 vec.rbegin() 和 vec.rend(),这对迭代器实际上是指向容器的末尾位置和起始位置。在 C++ 的标准库中,反向迭代器重载了 operator< 运算符,使得迭代器的比较方向发生了变化。具体来说,vec.rbegin() 的 operator< 实际上会调用容器中元素的 operator>,也就是说 a < b 的比较变成了 b > a 的比较。
因此,当你使用反向迭代器对向量进行排序时,sort 函数会按照 b > a 的方式进行比较,这导致了元素按照降序排列的效果。
这种设计使得 C++ 标准库中的 sort 函数非常灵活,可以通过传递不同类型的迭代器来改变排序的顺序,而不需要显式地定义比较函数或者仿函数,使得代码更加简洁和易于理解。