C++ 算法 upper_bound()

2025 年 1 月 2 日 | 阅读 4 分钟

C++ 算法 upper_bound() 函数是二分查找的一个版本。此函数用于返回一个迭代器,指向范围 [first, last) 中第一个大于指定值 val 的元素。

第一个版本使用运算符 < 进行元素比较,第二个版本使用给定的比较函数,即 comp。

语法

参数

first: 指向要搜索的范围中第一个元素的前向迭代器。

last: 指向要搜索的范围中最后一个元素之后的前向迭代器。

comp:一个用户定义的二元谓词函数,接受两个参数,如果这两个参数有序则返回 true,否则返回 false。它遵循严格弱序来对元素进行排序。

val: 用于比较范围内元素的上界值。

返回值

它返回一个迭代器,指向范围中第一个大于 val 的元素;如果未找到此类元素,则返回 last。

复杂度

平均而言,复杂度与 first 和 last 之间的距离呈对数关系:执行最多 log2 (N) + 1 次元素比较,其中 N = last - first。

数据竞争

访问范围 [first, last) 中的对象。

异常

如果元素比较或迭代器操作抛出异常,此函数将抛出异常。

注意:无效参数会导致未定义行为。

示例 1

让我们看一个简单示例来演示 upper_bound() 的用法

输出

Upper bound of 3 is: 4

示例 2

让我们看另一个简单示例

输出

lower_bound at position 3
upper_bound at position 6

示例 3

让我们看另一个简单示例

输出

Here are the contents of v:
2 3 5 6 7 7 7 8 9 10 
Upper bound of 3 in v = 5
Upper bound of 4 in v = 5
Upper bound of 5 in v = 6
Upper bound of 7 in v = 8
Upper bound of 0 in v = 2

Note that the upper bound location of 15 is 
the end (one-past-the-last) vector position.

示例 4

让我们看另一个简单示例

输出

Upper bound of 'C' is d
Upper bound of 'C' is C
All elements are less than 'z'.