STL利器:upper_bound与lower_bound的使用

upper_bound 用于在已排序的序列中查找第一个大于给定值的元素位置。

基本语法

cpp 复制代码
// 在 [first, last) 范围内查找第一个大于 value 的元素
auto it = upper_bound(first, last, value);

与相关函数的对比

|-------------|--------------------|-----|
| 函数 | 作用 | 返回值 |
| lower_bound | 第一个大于等于​ value 的元素 | 迭代器 |
| upper_bound | 第一个大于​ value 的元素 | 迭代器 |

示例代码:

cpp 复制代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    vector<int> nums = {1, 2, 2, 3, 3, 3, 4, 5};
    
    // 查找第一个大于 3 的元素
    auto it = upper_bound(nums.begin(), nums.end(), 3);
    auto it2 = lower_bound(nums.begin(), nums.end(), 3);
    
    if (it != nums.end()) {
        cout << "第一个大于3的元素是: " << *it << endl; // 输出 4
        cout << "位置索引: " << it - nums.begin() << endl; // 输出 6
    }
    cout<<"---------------------------------"<<endl;
    if (it2 != nums.end()) {
        cout << "第一个大于等于3的元素是: " << *it2 << endl; // 输出 3
        cout << "位置索引: " << it2 - nums.begin() << endl; // 输出 3
    }
    
    return 0;
}

注意点:

1)upper_bound只能在已排序的序列上工作

2)返回值是迭代器:需要转换为索引或直接使用

3)时间复杂度:O(log n) 的二分查找,很高效

4)边界检查:记得检查返回值是否等于 end(),表示没找到

相关推荐
All for pursuit.20 分钟前
【栈-4】739.每日温度
数据结构·c++·算法·leetcode
码匠许师傅23 分钟前
【C++三方组件】glog:Google 出品的 C++ 日志库
c++
Lazionr31 分钟前
二叉搜索树:从树形结构到高效查找
开发语言·c++
此生决int32 分钟前
深入理解C++系列(21)——异常
开发语言·c++
曼巴UE535 分钟前
UE5 客户端 需要的网络同步概念总结(3 )-事件同步 RPC 以及三种调用方式
网络·c++·网络协议·学习·rpc·ue5
All for pursuit.1 小时前
【栈-5】84.柱状图中最大的矩形
数据结构·c++·算法·leetcode
01二进制代码漫游日记1 小时前
C++之类和对象(上)02
c++
渡我白衣1 小时前
HttpRequest与HttpResponse的实现
服务器·数据结构·c++·人工智能·tcp/ip·机器学习·caffe
刃神太酷啦1 小时前
前端入门第一课:HTML 基础语法 + 常用标签 + 实战全解
服务器·c语言·前端·javascript·css·c++·html
蒸蒸yyyyzwd1 小时前
八股学习笔记 day42
c++·八股