首页 > 软件教程 >C++中std::upper

C++中std::upper

来源:互联网 2026-04-06 19:36:12

C++ std::upper_bound函数用法全面解析 在C++标准模板库(STL)的算法工具箱中,std::upper_bound是一个高效且精准的查找工具。它的核心功能是在一个已排序的区间 [first, last) 内,快速找到第一个严格大于指定值 value 的元素。该函数通过二分查找算法

C++ std::upper_bound函数用法全面解析

在C++标准模板库(STL)的算法工具箱中,std::upper_bound是一个高效且精准的查找工具。它的核心功能是在一个已排序的区间 [first, last) 内,快速找到第一个严格大于指定值 value 的元素。该函数通过二分查找算法实现,直接返回指向目标元素的迭代器,是处理有序数据时的关键函数。

1. 函数语法与定义

首先了解std::upper_bound的标准函数签名,这是正确使用的基础:

template
ForwardIterator upper_bound (ForwardIterator first, ForwardIterator last, const T& val);

2. 核心功能与返回值

该函数在指定范围[first, last)内搜索,返回第一个使“元素值大于val”成立的位置的迭代器。如果找不到这样的元素,则返回last,即区间的尾后迭代器。返回的迭代器类型与输入迭代器相同。

3. 在标准容器中的应用

对于std::vectorstd::array等有序顺序容器,直接使用容器的begin()end()迭代器调用upper_bound(),可在O(log n)时间复杂度内完成查找,效率极高。

下面是std::upper_bound在vector中的使用示例:

#include
#include
#include
using namespace std;
int main() {
vector v = {1, 2, 3, 4, 5};
// 查找第一个大于3的元素
auto it = upper_bound(v.begin(), v.end(), 3);
if (it != v.end()) {
cout << *it << endl; // 输出:4
}
return 0;
}

C++中std::upper

若要获取首个大于指定值的元素下标(索引),可以这样计算:

int idx = upper_bound(v.begin(), v.end(), 3) - v.begin();
cout << idx << endl; // 输出:3

输出结果3对应值为4的元素位置,符合“第一个大于3”的逻辑预期。

C++中std::upper

4. 在普通数组中的应用

std::upper_bound同样适用于普通数组,此时传递的迭代器即为指针。以下是数组查找示例:

#include
#include
using namespace std;
int main() {
int arr[] = {10, 20, 30, 40, 50};
int n = sizeof(arr) / sizeof(arr[0]);
// 查找第一个大于25的元素
int* p = upper_bound(arr, arr + n, 25);
if (p != arr + n) {
cout << *p << endl; // 输出:30
}
return 0;
}

输出30,因为它是数组中第一个大于25的数。

C++中std::upper

该函数还支持对数组的任意子区间进行查找。常用写法如下:int pos = upper_bound(a + l, a + r, m) - a;

此语句用于获取数组a在子区间[l, r)内第一个大于m的元素在整个数组中的索引。其中a为数组起始指针,lr定义了查找区间的左右边界。这种用法在算法竞赛和局部数据处理中非常常见。

C++中std::upper

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备14008430号-1 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。