0

0

c++中如何使用upper_bound_c++查找大于特定值的第一个元素【实例】

冰火之心

冰火之心

发布时间:2026-01-23 14:52:02

|

750人浏览过

|

来源于php中文网

原创

std::upper_bound是C++ STL中定义在头文件中的函数,用于在已排序区间中查找第一个严格大于给定值的元素迭代器,要求容器升序排列,否则行为未定义。

c++中如何使用upper_bound_c++查找大于特定值的第一个元素【实例】

upper_bound 函数名写错了,标准库upper_bound,没有下划线和后缀

标准 C++ STL 中只有 std::upper_bound,不存在 upper_bound_c++ 或带下划线的变体。这个名称可能是拼写错误或混淆了其他语言/库的命名习惯。它属于 头文件,作用是在**已排序区间**中查找第一个 **严格大于** 给定值的元素位置。

必须保证容器已升序排列,否则结果未定义

upper_bound 的行为依赖于数据有序性。若数组或 vector 未排序,返回的迭代器可能指向任意位置,甚至越界,且不报错——这是最常踩的坑。

  • 升序排列是硬性前提,不能靠“大概排过”蒙混
  • 降序排列时不能直接用,默认比较逻辑是 operator,需显式传入 std::greater()
  • std::set / std::map 等关联容器可直接使用,因其内部自动维持有序

正确调用方式:注意参数顺序与返回值含义

upper_bound 返回的是迭代器(不是下标),指向第一个 > value 的元素;若全部 ≤ value,则返回末尾迭代器(如 v.end())。常用场景是配合 std::distance 求下标,或直接解引用取值(需先判断是否越界)。

#include 
#include 
#include 

int main() { std::vector v = {1, 2, 4, 4, 4, 5, 7}; auto it = std::upper_bound(v.begin(), v.end(), 4); // 查找第一个 > 4 的元素 if (it != v.end()) { std::cout << "第一个大于 4 的值是: " << *it << "\n"; // 输出 5 std::cout << "其下标是: " << std::distance(v.begin(), it) << "\n"; // 输出 5 } }

lower_bound 的关键区别:等于也算在“下界”里

面对重复元素(如多个 4),lower_bound 返回第一个 ≥ value 的位置,upper_bound 返回第一个 > value 的位置。二者配合可快速统计某值出现次数。

立即学习C++免费学习笔记(深入)”;

  • lower_bound(v.begin(), v.end(), 4) → 指向索引 2(第一个 4)
  • upper_bound(v.begin(), v.end(), 4) → 指向索引 5(第一个 5)
  • 所以 4 的个数 = std::distance(lower, upper) = 3

别把 upper_bound 当成“找上界值”,它只管位置;也别假设它返回值本身——返回的是迭代器,解引用前务必检查有效性。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

358

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

542

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

53

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

197

2025.08.29

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

75

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

36

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

60

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

40

2025.11.27

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 4.1万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号