我需要在我的数组中找到最小元素,但是如果最小元素的数量超过 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+
现在是向前而不是向后。我想不出任何明智的办法。这个问题有优雅的解决方案吗?
PS有一个自定义比较器问题的解决方案,它适用于普通迭代器,但我仍然想知道是否有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()
anda.rend()
转换为“正常”迭代器。它需要转换返回的迭代器本身。