首先,这两个函数包含在头文件<algorithm>中,使用条件是在一个完全排序的数组中。

从外观上看,他们的参数列表包含四项:

(iterator pointing to the "first" , iterator pointing to the "last" , value , [compare function])

(指向"first"的指针,指向"last"的指针,一个值  (,一个比较函数)    )

他们的返回值也是一个指针,lower_bound返回一个指向在[first,last)左闭右开区间内第一个不满足element<value的元素的指针,或者返回一个指向比较函数(compare(value,element) )返回false的元素的指针。

upper_bound则返回一个指向在[first,last)左闭右开区间内第一个满足element>value的元素的指针,或者返回一个指向比较函数(compare(value,element) )返回true的元素的指针。

using namespace std;
bool cmp_lower(int value, int element) {return (value<element);
}
bool cmp_upper(int value, int element) {return (element>value);
}
int main() {vector<int>v = { 1,2,3,5,7 };int l = lower_bound(v.begin(), v.end(),3,cmp_lower) - v.begin();   int r = upper_bound(v.begin(), v.end(), 3,cmp_upper) - v.begin();      cout << l << ' ' << r << endl;    return 0;
}

此时,因为v中下标为2的元素值为3,不满足3<3(element<value),所以lower_bound返回指向它的指针,做差后赋值给l,此时l的值应为2.

同理,v中下标为3的元素值为4,满足4>3(element>value),所以upper_bound返回指向第三个元素的指针,做差赋给r=3.

再举一组例子,若v={1,2,4,5},那么不满足ele<val的元素为下标为2的元素,满足ele>val的也为下标为2的元素,此时l=r=2.

若v={1,2,2,2,2},此时ele均<val,此时lower_bound返回v.end(),l=5.

此时不存在ele>val,upper_bound也返回v.end(),r=5.

综上,我们不难发现,lower_bound,upper_bound所需要的比较函数是互补的,实践中若需比较特殊元素,只需要编写一个比较函数即可.

关于lower_bound与upper_bound的学习相关推荐

  1. lower_bound和upper_bound算法

    STL中的每个算法都非常精妙,接下来的几天我想集中学习一下STL中的算法. ForwardIter lower_bound(ForwardIter first, ForwardIter last,co ...

  2. upperbound找不到_关于lower_bound( )和upper_bound( )的常见用法

    头文件:#include lower_bound( )和upper_bound( )都是利用二分查找的方法在一个排好序的数组中进行查找的. 在从小到大的排序数组中, lower_bound( begi ...

  3. C++ STL: lower_bound 和 upper_bound

    接口声明 以下有两个不同的版本 lower_bound template <class ForwardIterator, class T>ForwardIterator lower_bou ...

  4. 【ACM】Uva 1152 (4 Values whose Sum is 0) 二分查找lower_bound() 和upper_bound()的使用

    [问题描述] The SUM problem can be formulated as follows: given four lists A, B, C, D of integer values, ...

  5. vector的插入、lower_bound、upper_bound、equal_range实例

    对于这几个函数的一些实例以便于理解: #include <cstdlib> #include <cstdio> #include <cstring> #includ ...

  6. lower_bound和 upper_bound 用法(STL)

    lower_bound和 upper_bound的头文件是#include<algorithm> lower_bound 返回第一个大于等于 x 的数的地址/迭代器 upper_bound ...

  7. STL中的lower_bound和upper_bound的理解

    STL迭代器表述范围的时候,习惯用[a, b),所以lower_bound表示的是第一个不小于给定元素的位置 upper_bound表示的是第一个大于给定元素的位置. 譬如,值val在容器内的时候,从 ...

  8. 二分检索函数lower_bound()和upper_bound()

    二分检索函数lower_bound()和upper_bound() 一.说明 头文件:<algorithm> 二分检索函数lower_bound()和upper_bound() lower ...

  9. lower_bound()和upper_bound()

    二分检索函数lower_bound()和upper_bound() lower_bound():找到大于等于某值的第一次出现 upper_bound():找到大于某值的第一次出现 必须从小到大排序后才 ...

最新文章

  1. css字体自定义,bootstrap自定义字体
  2. Gartner发布2022年政府行业主要技术趋势:XaaS、数字化、超自动化等
  3. 在线编辑_水墨-在线 Markdown 编辑器
  4. android按钮点击后闪退_iphone闪退是什么原因?
  5. cisco路由器配置DHCP实例
  6. 数学画图软件_关于数学建模(或科研绘图)的画图学习建议
  7. 九度-题目1103 二次方程计算器
  8. 类似818tu.co微信小说分销系统设计之多公众号网页授权自动登录源码
  9. SpringBoot + Sharding JDBC 读写分离、分库分表
  10. HPA的target显示unknown
  11. Java中文拼音转换
  12. “红粬黄酒第一村”乡贤吴善远联合聚力创办北墘酒业
  13. 越南unicode范围
  14. 7-2 查找书籍 (20 分)
  15. JZOJ5411. 【NOIP2017提高A组集训10.22】友谊 DP
  16. visio机柜设备图标_弱电系统设备安装大样图,CAD版本弱电新人必备!
  17. 【微积分】算法数学基础之微积分
  18. EndNote X9 下载安装使用(毕设参考文献格式)
  19. 【CicadaPlayer】av find stream info 探测framerate 分辨率
  20. 外卖系统注意功能源码

热门文章

  1. 陕南蜂蜜特点,陕南土蜂蜜怎么样?_陕南赤子_新浪博客
  2. spark-sql使用UDF函数实现ip映射省份,数据写出到mysql参数设置。
  3. 两院院士评选2019年中国、世界十大科技进展新闻揭晓
  4. 基于AVFoundation实现视频录制的两种方式
  5. django前后端跨域问题。 has been blocked by CORS policy: No ‘Access-Control-Allow-Origin‘
  6. 手把手地教你怎么用canvas的rotate做出类似太阳系(包括月球的公转)的嵌套运动
  7. 【第九篇】uploadify上传文件
  8. 如何查看操作系统的块大小
  9. 圆形笑脸logo设计HTML,8款给力HTML5/CSS3应用插件 可爱的HTML5笑脸
  10. ubuntu卸载php