两个很实用很方便的函数核心及用法{(lower_bound)+(max_element))~~
2016-03-24 17:33
281 查看
(1) 关于 lower_bound(a,a+n,x)-a的用法:
求x在数组a中的位置 (有序数组)
函数介绍
lower_bound()返回一个iterator(迭代器)它指向在 [first,last)标记的 有序序列中可以插入value,而不会破坏容器顺序的第一个位置,而这个位置标记了一个大于等于value。 其实还有upp_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的用法同上,但是都有一个共同点,就是找到的位置都是第一个最大(小)的元素,即存在多个相同大小的元素的时候找到的是第一个
相关文章推荐
- 数组指针和指针数组
- Java this 关键字返回当前类实例变量
- DAC驱动
- 理解 组件-实体-系统 (ECS \CES)游戏编程模型
- C#中,使用正式表达式匹配获取所需数据
- 在SqlServer2008R2中,在一张表上加上insert、update、delete触发器(带游标)
- 树根
- 出差(二十八)
- android toolbar应用
- 详解Python使用simplejson模块解析JSON的方法
- CListCtrl用法简介和使用技巧
- 那一年我在学USB的PCB走线
- vsftpd文件传输 、 Samba共享服务
- 记录一个map-site.xml -Xmx 1000m 写成了 1000报错问题
- Google 2016 面试题 | 数组补丁
- CStatic类的动态创建,以及使用风格dwStyle的介绍(二)-----CStatic控件的基本使用
- 记录---ORACLE 中的 ROW_NUMBER() OVER() 分析函数的用法
- 使用 Docker 搭建 Java Web 运行环境
- The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- js判断设备类型