最近接触了C++中的这两个函数,发现网上写的都不是很清楚,这里写一下他们的用法并且举两个例子。
函数的参数如下(这里摘自C语言中文网),这里的返回值返回的都是迭代器,最后一个比较函数可选,选了不同的比较函数带来的效果是完全不同的。这个比较函数的意思,上面也注明了,是查找不符合这个比较规则,当没有这个cmp函数的时候,默认的比较规则是小于,当然没有的时候可以不用太多思考,直接就是不小于和大于就行。
这两个函数本身的意思
#include<iostream>
#include <algorithm>
using namespace std;
int main(){
int a[10] = {1,2,3,4,5,6,7,8,9,10};
cout<<*lower_bound(a,a+10,6)<<endl;
cout<<*upper_bound(a,a+10,6)<<endl;
return 0;
}
结果
?
lower_bound() 函数查找升序数组中大于等于(>=)指定元素的第一个元素。
upper_bound()函数查找升序数组中大于(>)指定元素的第一个元素。
··············································································································分割线
如果我想将该函数用于下降序列的话,使用greater函数,但是意义会改变
#include<iostream>
#include <algorithm>
using namespace std;
int main(){
int a[10] = {10,9,8,7,6,5,4,3,2,1};
cout<<*lower_bound(a,a+10,6,greater<int>())<<endl;
cout<<*upper_bound(a,a+10,6,greater<int>())<<endl;
return 0;
}
那么输出结果就变成了6和5
?使用自定义比较器(greater)函数查找到的就是
lower_bound() 函数查找降序数组中小于等于(<=)指定元素的第一个元素。
upper_bound()函数查找降序数组中小于(<)指定元素的第一个元素。
还有很多情况,可以移步C语言中文网,我只是搬运一些知识并实践,希望能够帮助更多不熟悉这两个函数的人减少一些测试时间。
|