C++ stl区间操作

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;
}
输出结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44577381/article/details/87348283