Awe*_*JSF 1 c++ sorting algorithm iterator reverse-iterator
例如,下面的代码按 desc 顺序对 vec 进行排序:
std::vector<int> vec = {1, 2, 5, 4, 3};
sort(vec.rbegin(), vec.rend());
for(const auto v : vec)
std::cout << v << "\n";
output 5 4 3 2 1
Run Code Online (Sandbox Code Playgroud)
关于C++ 参考:
将范围 [first,last) 中的元素按升序排序。对于第一个版本,使用运算符 < 来比较元素 [...]
该函数调用确实按升序对向量进行排序,从最后一个元素开始到第一个元素,因为使用了反向迭代器
sort(vec.rbegin(), vec.rend());
Run Code Online (Sandbox Code Playgroud)
当您使用反向迭代器时,向量将以相反的顺序遍历。
考虑这个 for 循环
for (auto first = vec.rbegin(), last = vec.rend(); first != last; ++first)
{
std::cout << *first << ' ';
}
std::cout << '\n';
Run Code Online (Sandbox Code Playgroud)
它的输出是
3 4 5 2 1
Run Code Online (Sandbox Code Playgroud)
如果您想在直接方向上按升序对向量进行排序,则不要使用反向迭代器。例如
sort(vec.begin(), vec.end());
Run Code Online (Sandbox Code Playgroud)
std::less<int>或者,如果要使用反向迭代器,则需要使用该类型的函数对象,而不是该类型的默认函数对象std::greater<int>
sort( vec.rbegin(), vec.rend(), std::greater<int>() );
Run Code Online (Sandbox Code Playgroud)