避免 std::upper_bound 崩溃

Avoid crash from std::upper_bound

每当我这样做时:

auto itr = ranges::upper_bound(vector, value);

如果 value 大于 vector 中的任何值,那么它会给我一个 error/crash (debug assertion failed)。我想以某种方式避免这种情况。我可能想到的唯一解决方案是:

ranges::sort(vector); // or any code which can find the maximum element in a container
if (*(vector.end()-1) > value)
    auto itr = ranges::upper_bound(vector, value);

但是找到最大值意味着更多的工作,我可以用更有效的方式来做吗? 编辑: 我在崩溃时使用的全部代码在这里:

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


auto main() -> int
{
int n, value;
cin >> n;
vector <int> vector;
for (int i = 0; i < n; i++)
{
    int a;
    cin >> a;
    vector.push_back(a);
}
cin >> value;
ranges::sort(vector);
auto itr = ranges::upper_bound(vector, value);
cout << *itr;
return 0;
}

来自cppreference

Returns an iterator pointing to the first element in the range [first, last) that is greater than value, or last if no such element is found.

这意味着它可能return结束迭代器。在这种情况下,您不能取消引用它。