函数学习-upper_bound与lower_bound函数
upper_bound与lower_bound函数
格式
两个函数用法类似,都是对一个有序序列的一个左闭右开的有序区间进行二分查找,区间左端点和右端点分别为第1、2个参数,第三个参数是查找的值,第四个参数可填一个cmp函数。以下用upper_bound函数举例。
1 对于一个升序序列或不下降序:upper_bound(lef,rig,k);
2 对于一个降序序列或不上升序列
upper_bound(lef,rig,k,cmp);
//cmp函数的书写
bool cmp(const int &x,const int &y){return x>y;}
对于数组,lef和rig为指向数组元素的指针,STL则是迭代器。
注意cmp函数里参数类型要么为const int&
要么为int
。不能填int &
。
用法
设k为查找值。
- 对于升序或不下降序列,不填cmp函数:
upper_bound函数返回指向大于k的第一个元素的指针(迭代器),找不到就返回填入的区间右端点,也就是返回指向 | 区间末尾元素的后一个元素 | 的指针(迭代器)。
lower_bound函数返回指向大于等于k的第一个元素的指针(迭代器),找不到就返回填入的区间右端点,也就是返回指向 | 区间末尾元素的后一个元素 | 的指针(迭代器)。 - 对于降序或不上升序列,填cmp函数:
upper_bound函数返回指向小于k的第一个元素的指针(迭代器),找不到就返回填入的区间右端点,也就是返回指向 | 区间末尾元素的后一个元素 | 的指针
lower_bound函数返回指向小于等于k的第一个元素的指针(迭代器),找不到就返回填入的区间右端点,也就是返回指向 | 区间末尾元素的后一个元素 | 的指针
最后
个人总结,如果发现错误欢迎指出。