📌  相关文章
📜  C++中的upper_bound(1)

📅  最后修改于: 2023-12-03 14:39:57.905000             🧑  作者: Mango

C++ 中的 upper_bound

简介

upper_bound 是 C++ 标准库中定义在 <algorithm> 头文件中的一个函数。它用于在有序容器(如 std::vectorstd::set)中寻找第一个不小于给定值的元素。

语法

upper_bound 的语法如下所示:

template <class ForwardIterator, class T> 
ForwardIterator upper_bound (ForwardIterator first, ForwardIterator last, const T& value);

其中,firstlast 表示要搜索的元素的范围,value 是要查找的值。函数返回第一个大于 value 的元素的迭代器。如果没有大于 value 的元素,则返回 last,即末尾迭代器。

实例

假设我们要在一个有序的 std::vector<int> 中查找第一个大于等于 5 的元素,可以这样写:

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> v = {1, 3, 4, 5, 7, 8, 9};
    auto it = std::upper_bound(v.begin(), v.end(), 5);
    if (it != v.end()) {
        std::cout << "The first element greater than 5 is " << *it << std::endl;
    } else {
        std::cout << "No elements greater than 5\n";
    }
    return 0;
}

运行结果为:

The first element greater than 5 is 7
注意事项
  • upper_bound 只能用于有序容器,否则结果是未定义的。
  • 如果要查找的值比容器中的所有元素都大,返回的是末尾迭代器。
  • 如果要查找的值比容器中的所有元素都小,返回的也是末尾迭代器。
  • 如果要查找的值在容器中存在多个,返回的是其中任意一个。
  • 对于只读容器,使用 const_iterator;对于容器中的可读写元素,使用 iterator
  • 由于 upper_bound 使用的是二分查找算法,所以只要容器中的元素是可比较的(比如 intdouble 或字符串类型),都可以进行查找操作。