这里首先介绍一个万能头文件:
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;
}
注意:不能去重后排序