lower_bound是一个查找函数,使用时要引用<algorithm>头文件。
它的作用是查找一个元素第一次出现在数组中的位置。
代码演示
#include<iostream>
#include<algorithm>
using namespace std;
int a[10];
int b,c;
int main()
{
cin>>b>>c;
for(int i=1;i<=b;i++)
{
cin>>a[i];
}
int q=lower_bound(a,a+b,c)-a;
if(a[q]==c)
printf("%d in %d",c,q);
}
结果演示
6 4
1 3 4 4 5 7
4 in 3
10 7
2 3 6 7 7 9 7 5 1 7
7 in 4
int q=lower_bound(a,a+b,c)-a;//注释:
在C++中,数组的索引是从0开始的。当你使用lower_bound
函数时,它返回一个指向第一个不小于给定值的元素的迭代器。但是,这个迭代器是基于数组的起始地址的。举个例子,假设数组a
是[1,3,4,4,5]
,并且你想找到第一个大于或等于4的元素的位置。lower_bound
会返回指向4
的迭代器。但是,这个迭代器的值是基于数组的起始地址的,所以它可能是一个像a+3
这样的值。为了得到元素在数组中的位置,从1开始计数,你需要从返回的迭代器中减去数组的起始地址a
。这样,你得到的是基于数组起始位置的偏移量,而不是迭代器的绝对地址值。例如,如果lower_bound(a, a+b, c)
返回a+3
,那么a+3 - a = 3
,所以第一个大于或等于c
的元素在数组中的位置是3。总结一下,减a
是为了将基于数组起始地址的迭代器转换为基于数组起始位置的元素位置。