STL(标准模板库)algorithm常用函数

这里首先介绍一个万能头文件:

include<bits/stdc++.h>

在这里插入图片描述
一个头文件解决了一切,接下来为了方便都使用这个头文件

1.max,min函数

代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a[2]={1,2};
     printf("max=%d\n",max(a[1],a[0]));
     printf("min=%d\n",min(a[1],a[0]));
	return 0;
} 

运行结果:
在这里插入图片描述

2.swap函数

代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a[2]={1,2};
     swap(a[0],a[1]);
     printf("%d %d",a[0],a[1]);
	return 0;
} 

运行结果:
在这里插入图片描述

3.abs()函数(求绝对值)

代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a[2]={1,-2};
     printf("%d %d",a[0],abs(a[1]));
	return 0;
} 

结果:
在这里插入图片描述

4.reverse()函数

reverse(it, it+a)可以将数组指针在[it, it+a)之间的元素或容器的迭代器在[it, it2)范围内的元素进行反转
a=需要反转数的个数
代码:

整型数反转:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a[10]={0,1,2,3,4,5,6,7,8,9};
     reverse(a,a+10);
     for(int i=0;i<10;i++)
     printf("%d ",a[i]);
	return 0;
} 

结果:
在这里插入图片描述

字符串反转:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	char a[10]={"abcdefghi"};
     reverse(a,a+9);
     puts(a);
	return 0;
} 

结果:
在这里插入图片描述

5.next_permutation函数(全排列)

使用条件:排好序
next_permutation(t1,t1+a)可以对数组指针[t1,t1+a]之间的元素进行全排列,也就是"a=全排列的长度"
字符串全排列:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	char a[10]={"abc"};
    do
    {
    	 puts(a);
    }while(next_permutation(a,a+3));
	return 0;
} 

运行结果:
在这里插入图片描述

若改成:

next_permutation(a,a+2)

运行结果:
在这里插入图片描述
若改成原始字典序就是降序

#include<bits/stdc++.h>
using namespace std;
int main()
{
	char a[10]={"cba"};
    do
    {
    	 puts(a);
    }while(next_permutation(a,a+3));
	return 0;
} 

运行结果:
在这里插入图片描述
所以在此强调(使用这个函数原始顺序最好是字典序升序)!!!!

6.fill()函数

fill(it,it+a)可以把数组或容器中的某一段区间赋为某个相同的值。和memset不同,这里的赋值可以是数组类型对应范围中的任意值。
a=赋值的个数
代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a[5]={1,5,6,7,3};
     fill(a,a+5,999);//将a[0]~a[4]赋值3为999 
     for(int i=0;i<5;i++)
     printf("%d ",a[i]);
	return 0;
} 

结果:
在这里插入图片描述

7.lower_bound(begin,end,num)函数

使用条件:排好序
从数组的begin位置到end-1位置二分查找第一个大于等于num的数组,找到返回该数组地址,不存在则返回end。通过返回的地址减去起始地址begin,得到数字在数组中的下标。
代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int x;
	int a[5]={1,2,3,4,5};
     x=lower_bound(a,a+5,3)-a;
     printf("%d ",x);
	return 0;
} 

结果:
在这里插入图片描述
注意:如果使用次函数查找某一个数,没有找到只会返回第一个比这个数大的数的下标,要是判断有没有找到,可以用返回下标的数和需要查找的数进行对比即可

8.upper_bound(begin,end,num)函数

使用条件:排好序
从数组的begin位置到end-1位置二分查找第一个大于num的数组,找到返回该数组地址,不存在则返回end。通过返回的地址减去起始地址begin,得到数字在数组中的下标。
代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int x;
	int a[5]={1,2,3,4,5};
     x=upper_bound(a,a+5,4)-a;
     printf("%d ",x);
	return 0;
} 

结果:
在这里插入图片描述

9.unique(去重)
先排序,然后用尺取法

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
	int a[5]={1,1,2,2,3};
	int n = unique(a,a+5)-a;
	for(int i=0;i<5;i++){
		printf("%d ",a[i]);
	}
	printf("\n我们只取n之前的数:\n");
	for(int i=0;i<n;i++){
		printf("%d ",a[i]);
	}
	return 0;
} 

在这里插入图片描述
注意:不能去重后排序

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值