** 懂得可以直接看测试: 简单的对这个函数的参数做个介绍,前两个参数在将一段连续的空间的首尾地址传输了进去,说明我们要进行操作的是这一段空间里面的数值,最后一个是一个判断标准,即在这段连续的空间中,从头部的地址开始找,找一个大于等于标准的值,接着返回存贮该值的地址,由于系统中的地址是十六进制表示的,所以返回出来的是一个十六进制,当我们用此地址减去首地址,然后经过进制转换,就是其在连续空间中的下标**
第一个测试:在有序数组调用这个函数时的各种表现
先看测试代码
int main()
{
ll num;
cin>>num;
for(int i=1;i<=num;i++) cin>>shu[i];
ll biao=lower_bound(shu,shu+num,6)-shu;
cout<<biao<<endl;
}
通过这组测试数据我们发现若没有找到的时候,这个函数是输出0;
接下换另一组
首先我们要明确我们的数组的初始下标是0
大于等于6的第一个下表准确来说是在3,
但在减去数组的首地址之后我们可以发现,他的值是3,是真实的下标,接下来进行下一组测试。
此时改一下代码:
int main()
{
ll num;
cin>>num;
for(int i=1;i<num+1;i++) cin>>shu[i];
ll biao=lower_bound(shu+1,shu+num+1,6)-shu;
cout<<biao<<endl;
}
测试为:
显然这也是真实的下标。
第二组测试**:利用vector容器进行**查找
代码如下:
vector<ll> shu1;
ll shu[N];
int main()
{
ll num;
cin>>num;
ll yuan;
for(int i=1;i<num+1;i++)
{
cin>>yuan;
shu1.push_back(yuan);
}
ll biao=lower_bound(shu1.begin(),shu1.end(),100)-shu1.begin();
cout<<biao<<endl;
}
还是测试一下找不到的时候
通过这组测试我们就可以清晰的发现,vector找不到的时候是返回最后一个下标加1 的一个数,因为这里最后一个下标是4所以它返回的是5
接下来进行另一组测试:
改一下代码:
int main()
{
ll num;
cin>>num;
ll yuan;
for(int i=1;i<num+1;i++)
{
cin>>yuan;
shu1.push_back(yuan);
}
ll biao=lower_bound(shu1.begin(),shu1.end(),6)-shu1.begin();
cout<<biao<<endl;
}
测试结果:
通过这组测试我们就可以知道当可以找到值时,其返回值跟传入数组的首地址的情况其实是一样的。
好了,测试就到这里,感觉有用的大佬,点个赞谢谢