(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的用法同上,但是都有一个共同点,就是找到的位置都是第一个最大(小)的元素,即存在多个相同大小的元素的时候找到的是第一个