关于lower_bound与upper_bound的学习
首先,这两个函数包含在头文件<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的学习相关推荐
- lower_bound和upper_bound算法
STL中的每个算法都非常精妙,接下来的几天我想集中学习一下STL中的算法. ForwardIter lower_bound(ForwardIter first, ForwardIter last,co ...
- upperbound找不到_关于lower_bound( )和upper_bound( )的常见用法
头文件:#include lower_bound( )和upper_bound( )都是利用二分查找的方法在一个排好序的数组中进行查找的. 在从小到大的排序数组中, lower_bound( begi ...
- C++ STL: lower_bound 和 upper_bound
接口声明 以下有两个不同的版本 lower_bound template <class ForwardIterator, class T>ForwardIterator lower_bou ...
- 【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, ...
- vector的插入、lower_bound、upper_bound、equal_range实例
对于这几个函数的一些实例以便于理解: #include <cstdlib> #include <cstdio> #include <cstring> #includ ...
- lower_bound和 upper_bound 用法(STL)
lower_bound和 upper_bound的头文件是#include<algorithm> lower_bound 返回第一个大于等于 x 的数的地址/迭代器 upper_bound ...
- STL中的lower_bound和upper_bound的理解
STL迭代器表述范围的时候,习惯用[a, b),所以lower_bound表示的是第一个不小于给定元素的位置 upper_bound表示的是第一个大于给定元素的位置. 譬如,值val在容器内的时候,从 ...
- 二分检索函数lower_bound()和upper_bound()
二分检索函数lower_bound()和upper_bound() 一.说明 头文件:<algorithm> 二分检索函数lower_bound()和upper_bound() lower ...
- lower_bound()和upper_bound()
二分检索函数lower_bound()和upper_bound() lower_bound():找到大于等于某值的第一次出现 upper_bound():找到大于某值的第一次出现 必须从小到大排序后才 ...
最新文章
- css字体自定义,bootstrap自定义字体
- Gartner发布2022年政府行业主要技术趋势:XaaS、数字化、超自动化等
- 在线编辑_水墨-在线 Markdown 编辑器
- android按钮点击后闪退_iphone闪退是什么原因?
- cisco路由器配置DHCP实例
- 数学画图软件_关于数学建模(或科研绘图)的画图学习建议
- 九度-题目1103 二次方程计算器
- 类似818tu.co微信小说分销系统设计之多公众号网页授权自动登录源码
- SpringBoot + Sharding JDBC 读写分离、分库分表
- HPA的target显示unknown
- Java中文拼音转换
- “红粬黄酒第一村”乡贤吴善远联合聚力创办北墘酒业
- 越南unicode范围
- 7-2 查找书籍 (20 分)
- JZOJ5411. 【NOIP2017提高A组集训10.22】友谊 DP
- visio机柜设备图标_弱电系统设备安装大样图,CAD版本弱电新人必备!
- 【微积分】算法数学基础之微积分
- EndNote X9 下载安装使用(毕设参考文献格式)
- 【CicadaPlayer】av find stream info 探测framerate 分辨率
- 外卖系统注意功能源码
热门文章
- 陕南蜂蜜特点,陕南土蜂蜜怎么样?_陕南赤子_新浪博客
- spark-sql使用UDF函数实现ip映射省份,数据写出到mysql参数设置。
- 两院院士评选2019年中国、世界十大科技进展新闻揭晓
- 基于AVFoundation实现视频录制的两种方式
- django前后端跨域问题。 has been blocked by CORS policy: No ‘Access-Control-Allow-Origin‘
- 手把手地教你怎么用canvas的rotate做出类似太阳系(包括月球的公转)的嵌套运动
- 【第九篇】uploadify上传文件
- 如何查看操作系统的块大小
- 圆形笑脸logo设计HTML,8款给力HTML5/CSS3应用插件 可爱的HTML5笑脸
- ubuntu卸载php