You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ upper_bound()函数运行结果疑问:为何返回7而非1?

upper_bound 返回结果异常原因说明

你遇到的问题本质是没有满足upper_bound的前置使用条件,核心原因如下:

  • upper_bound仅对按指定比较器有序的序列生效,默认使用less<T>()比较器,要求传入序列为升序排列。如果你的序列是降序排列,没有配套传入greater<T>()比较器的话,返回结果是未定义的,完全不符合预期。
  • 当序列中所有元素都小于等于你传入的查找目标时,upper_bound会直接返回序列的尾后迭代器end(),如果你用返回迭代器减去序列首迭代器计算偏移量,得到的结果就等于序列的总长度,也就是你拿到的7。

验证示例

你可以参考下面的代码复现你的问题和正确用法:

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main() {
    // 错误用法:降序数组用默认比较器
    vector<int> arr = {7,6,5,4,3,2,1};
    // 查找目标为7,默认比较器要求升序,序列不满足条件
    auto err_it = upper_bound(arr.begin(), arr.end(), 7);
    cout << err_it - arr.begin() << endl; // 输出7,和你得到的结果一致

    // 正确用法:降序数组配套传入greater<int>()比较器
    auto correct_it = upper_bound(arr.begin(), arr.end(), 7, greater<int>());
    cout << correct_it - arr.begin() << endl; // 输出1,也就是你预期的结果
    return 0;
}

内容的提问来源于stack exchange,提问作者karanforprogram1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 08:15:05