lower_bound()和max_element()函数用法

                   (1) 关于 lower_bound(a,a+n,x)-a的用法:
                                 求x在数组a中的位置 (有序数组)

                  

函数介绍

 

  lower_bound()返回一个iterator(迭代器)它指向在 [first,last)标记的 有序序列中可以插入value,而不会破坏容器顺序的第一个位置,而这个位置标记了一个大于等于value。 其实还有upper_bound();upper_bound()返回的是最后一个大于等于val的位置。

注意事项

  调用lower_bound之前必须确定序列为有序序列,否则调用出错。第一个版本排序根据底层的 <(小于)操作符,第二个版本根据comp进行排序

函数lower_bound()在first和last中的前闭后开区间进行二分查找返回大于或等于val第一个元素位置。如果所有元素都小于val,则返回last的位置,是查找序列中的第一个出现的值大于等于val的位置;

 来看这个代码:

#include<bits/stdc++.h>
using namespace std;
int a[100];
int main()
{
    int n,i,m,x;
    while(~scanf("%d",&n))
    {
        for(i=0;i<n;i++)
            scanf("%d",&a[i]);
            sort(a,a+n);
            scanf("%d",&m);
            while(m--)
            {
                scanf("%d",&x);
                int p=lower_bound(a,a+n,x) - a;//格式;
        printf("%d\n",p);
            }
//        if(a[p]==x) printf("%d found at %d\n",x,p+1);
//        else printf("%d not found",x);
    }
    return 0;
}

 

 

 

                        (2)  max_element的用法及min_element

                

a.   position=max_element(a,a+n)-a;//说明它本质是一个指针;     

   这样写的话就代表的是找到的最大元素的位置在哪里,position代表位置,还是蛮好理解的吧?  值得注意的一点是这个返回的是最大元素的位置,即指针指向第一个最大元素我们用以下方式表示找到的最大元素的值   ;

b .  printf("%d\n",*max_element(a,a+n));  

     同时  min_element的用法同上,但是都有一个共同点,就是找到的位置都是第一个最大(小)的元素,即存在多个相同大小的元素的时候找到的是第一个                                                                                                                                                                    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值