关于lower_bound()当无法找到值时返回什么的测试

** 懂得可以直接看测试: 简单的对这个函数的参数做个介绍,前两个参数在将一段连续的空间的首尾地址传输了进去,说明我们要进行操作的是这一段空间里面的数值,最后一个是一个判断标准,即在这段连续的空间中,从头部的地址开始找,找一个大于等于标准的值,接着返回存贮该值的地址,由于系统中的地址是十六进制表示的,所以返回出来的是一个十六进制,当我们用此地址减去首地址,然后经过进制转换,就是其在连续空间中的下标**

第一个测试:在有序数组调用这个函数时的各种表现
先看测试代码

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;
                          
 }

测试结果:
在这里插入图片描述
通过这组测试我们就可以知道当可以找到值时,其返回值跟传入数组的首地址的情况其实是一样的。
好了,测试就到这里,感觉有用的大佬,点个赞谢谢

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

絨辉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值