stl常用区间函数:
注意:c++区间参数中所有区间均为左闭右开[a,a+n)
1.排序:sort(a,a+n)
2.随机化:random_shuffle(a,a+n)
3.下一个排列:next_permutation(a,a+n)
如:112的下一个排列为121。当没有下一个时,返回false
4.前一个排列:prev_permutation(a,a+n)
如:121的下一个排列为112。当没有前一个时,返回false
5.去重:newsize=unique(a,a+n)-a
将相邻的重复元素移到最后,并返回第一个无效元素(即第一个重复元素)的位置
如:a数组原来为1,1,2,2,3 用了上面的操作后变为1,2,3,x,x,newsize=3
6. 二分找下界:id=lower_bound(a,a+n,x)-a
返回第一个>=x的位置
7.二分找上界:id=lower_bound(a,a+n,x)-a
返回第一个>x的位置
示范代码
代码
#include<bits/stdc++.h>
using namespace std;
int a[]={1,1,2,2,3,4,7};
int n=7;
void print(int *a)
{
for (int i=0;i<n;i++) printf("%d ",a[i]);
printf("\n");
}
int main()
{
printf("数组a原来的值:\n");
print(a);
printf("随机化后:\n");
random_shuffle(a,a+n);
print(a);
printf("下一个排列为:\n");
next_permutation(a,a+n);
print(a);
printf("再次随机化后:\n");
random_shuffle(a,a+n);
print(a);
printf("前一个排列为:\n");
prev_permutation(a,a+n);
print(a);
printf("重新排序后:\n");
sort(a,a+n);
print(a);
printf("查找2的下界:\n");
printf("%d\n",lower_bound(a,a+n,2)-a);
printf("查找2的上界:\n");
printf("%d\n",upper_bound(a,a+n,2)-a);
printf("去重后的大小为:\n");
printf("%d\n",unique(a,a+n)-a);
printf("现在的a:\n");
print(a);
return 0;
}