带有反向迭代器的 STL 算法函数不起作用

STL algorithm function with reverse iterators doesn't work

我需要在我的数组中找到最小元素,但如果最小元素的数量超过 1,我需要使用最合适的元素。
考虑这段代码:

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main()
{
    int n;
    cin >> n;
    vector<int> a(n);
    for (int& x : a)
        cin >> x;
    vector<int>::iterator it_min = min_element(a.rbegin(), a.rend());

}

没用。我不明白为什么。 Reverse_iterator 基本上提供了正确执行功能所需的所有运算符。但显然 min_element() 期望只给出“普通”迭代器。我能以某种方式绕过它吗?好的,我可以使用 .base() 函数成员 (min_element(a.rbegin().base(), a.rend().base())) 将我的 reverse_iterator 转换为迭代器,但这并不能解决我的问题,因为 operator+ 现在是向前的,而不是向后的.我想不出任何明智的事情。这个问题有没有优雅的解决方案?

P.S。我的自定义比较器问题有一个解决方案,它适用于普通迭代器,但我仍然想知道是否有 reverse_iterators:

的解决方案

vector<int>::iterator it_min = min_element(a.begin(), a.end(), [](int min, int b) { return min >= b; });

UPD:回答后,我明白我所说的关于 min_element() 的一切都是错误的。它可以接受 reverse_iterators 并正确使用它们,但我很困惑为什么它需要将 reverse_iterators 转换为迭代器,但它不需要 a.rbegin()a.rend() 转换为“普通”迭代器。它需要转换返回的迭代器本身。

您正在将 reverse_iterator 传递给 min_element,然后它也会 returns reverse_iterator

将代码更改为

vector<int>::reverse_iterator it_min = min_element(a.rbegin(), a.rend());

或者

auto it_min = min_element(a.rbegin(), a.rend());

您稍后可以通过 it_min.base() - 1 从返回的 reverse_iterator 中获取 vector<int>::iterator