讲师中心 微信公众号
AI工具推荐 视频效率加速

C++怎么使用upper_bound_C++范围查询教程【定位】

云辰同学_4471

云辰同学_4471

发布时间:2026-02-27 12:29:02

|

206人浏览过

|

来源于php中文网

原创

C++标准库中只有std::upper_bound,不存在upper_bound_C++;它定义在<algorithm>中,要求容器已排序且使用随机访问迭代器才能实现O(log n)效率。

c++怎么使用upper_bound_c++范围查询教程【定位】

别用 upper_bound_C++ —— 这根本不是标准 C++ 的函数名,编译器会直接报错。

为什么找不到 upper_bound_C++?

这是个典型命名混淆:C++ 标准库只有 std::upper_bound,没有带下划线和语言后缀的变体。你搜到的“upper_bound_C++”多半是文档误写、博客标题党,或是旧版自定义封装函数(非标准)。

  • 标准头文件是 <algorithm>,不是 <algorithm.h> 或其他拼写
  • 必须显式指定命名空间:std::upper_bound,不能裸写 upper_bound(除非有 using,但不推荐)
  • 它只接受**已排序**的范围,否则行为未定义 —— 不会报错,但结果完全不可靠

std::upper_bound 的基本用法和参数陷阱

它返回第一个 > value 的迭代器,不是下标,也不是布尔值。常见误用是当成“是否存在”的判断函数。

  • 签名是 std::upper_bound(first, last, value),其中 first 和 last 是左闭右开区间(last 不参与比较)
  • 第三个参数类型必须和容器元素可比较;若用自定义类型,需提供 operator< 或传入比较函数
  • 对 std::vector<int> 操作时,别直接传数组名 —— 数组名退化为指针,std::upper_bound(arr, arr + n, x) 才对
  • 返回值要判是否等于 last,否则解引用可能越界:if (it != vec.end()) { use *it; }
std::vector<int> v = {1, 2, 2, 3, 4, 4, 4, 5};
auto it = std::upper_bound(v.begin(), v.end(), 4); // 指向末尾的 5
// it - v.begin() == 7,不是“4 的个数”

和 std::lower_bound 配合查范围时的坑

想查某个值出现的全部位置?得用 lower_bound 和 upper_bound 配合,但二者语义不对称:

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载

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

  • lower_bound 返回第一个 ≥ value 的位置
  • upper_bound 返回第一个 > value 的位置
  • 所以 [lower, upper) 正好是所有 == value 的元素区间 —— 注意是左闭右开
  • 如果 value 根本不存在,lower == upper,此时区间为空,但不会崩溃
  • 别用 upper_bound - lower_bound > 0 判断存在性,直接用 lower != upper 更准确

性能与容器选择的影响

std::upper_bound 要求随机访问迭代器才能达到 O(log n)。在 std::list 或 std::forward_list 上强行使用,编译可能通过(依赖 ADL 或隐式转换),但实际是线性遍历,失去二分意义。

  • 仅对 std::vector、std::deque、原生数组等支持 it + n 的容器高效
  • std::set / std::map 自带 upper_bound 成员函数(set.upper_bound(x)),它比 std::upper_bound(set.begin(), set.end(), x) 更快,且不依赖迭代器随机访问能力
  • 用 std::sort 排过序的 vector 再查,比反复插入进 set 再查,在批量查询场景下往往更快 —— 但得自己维护有序性

最常被忽略的一点:它不检查容器是否真有序。调试时发现结果错位,第一反应不该是改算法,而是加一句 std::is_sorted(v.begin(), v.end()) 确认 —— 尤其当数据来自外部输入或中间计算时。

热门AI工具

更多
Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

1138

2023.09.04

string转int
string转int

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

6159

2023.08.02

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

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

3005

2024.08.29

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

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

3848

2025.08.29

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

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

2685

2025.08.29

C++ 智能指针与现代内存管理
C++ 智能指针与现代内存管理

深入讲解 C++ 现代内存管理的核心工具——智能指针,涵盖 unique_ptr 独占所有权语义、shared_ptr 引用计数机制与循环引用问题、weak_ptr 弱引用的应用场景、make_unique/make_shared 工厂函数的性能优势、自定义删除器的编写、RAII 资源管理思想的实践,以及从裸指针迁移到智能指针的重构策略,帮助开发者编写安全无泄漏的现代 C++ 代码。

359

2026.04.23

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

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

550

2025.09.05

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

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

323

2025.11.16

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

0

2026.10.16

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn