繁体   English   中英

避免 std::upper_bound 崩溃

[英]Avoid crash from std::upper_bound

每当我这样做时:

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

如果该value大于vector中的任何值,那么它将给我一个错误/崩溃( 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

返回指向范围 [first, last) 中大于 value 的第一个元素的迭代器,如果没有找到这样的元素,则返回 last。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM