目录
目录
万能头文件
include
1、memset()批量初始化函数
2、next/prev_permutation全排列函数
3、unique去重函数
4、reverse()函数
5、fill()函数
6、lower_bound(begin,end,num)函数
7、求绝对值,abs()和 fabs()函数
8、求幂函数,pow和sqrt
9、swap(a,b)交换函数
1.原型:void *memset(集合,初始内容,大小)。
2.初始化可以为两种内容:整型0和-1,字符ASCLL
3.应用场景:
* 需要数组初始值为0和-1。
* 需要字符串数组初始化多个相同的值。
初始化数组0和-1(只能这两个值):
#include
using namespace std;
int main()
{
int a[10];
int b[10];
int c[10];
memset(a,-1,sizeof(a));
//-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
memset(b,0,sizeof(b));
// 0 0 0 0 0 0 0 0 0 0
memset(c,1,sizeof(c));//虽然不报错,但初始化的内容不是我们想要的内容
//16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009
for(int i=0;i<10;i++)
{
printf("%d ",b[i]);
}
return 0;
}
初始化为字符:
#include
using namespace std;
int main()
{
char a[10];
char b[10];
memset(a,'a',sizeof(a));
memset(b,'bbbbb',sizeof(b));//虽然给到多个字符,但不报错,且有效的也只有一个
for(int i=0;i<10;i++)
{
printf("%c ",a[i]);
}
return 0;
}
1.next_permutation(数组名,数组名+范围):将范围内的排序替换成更大的排序
2.prev_permutation(数组名,数组名+范围) : 将范围内的排序替换成更小的排序
3.返回值为bool型,如果在当前排序序列下能找到比当前更“大”的排序返回true
如果到达最大排序,下一步重复时,返回false
4.应用场景:涉及到排列问题。
#include
#include
using namespace std;
int a[3]={1,2,3};
//next_permutation(数组名,数组名+范围):将范围内的排序替换成更大的排序
//prev_permutation(数组名,数组名+范围) : 将范围内的排序替换成更小的排序
int main()
{
//三位数,123,全排列顺序。
//1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1
for(int i=0;i<12;i++)
{
printf("%d %d %d ",a[0],a[1],a[2]);
//如果能找到比当前更“大”的排序返回true
//如果到达最大排序,下一步重复时,返回false
//prev_permutation同理,则相反。
if(!next_permutation(a,a+3))
{
printf("到达最大的排序!下步进行循环\n");
};
}
return 0;
}
1. 只能除去连续重复的数或者字符, 不能用于构造唯一性数组。
2.原数组不会缩小,要求得有效数组段,进行输出 。
例如:1,1,3,4,1,5,5,5 去重得到序列为:1,3,4,1,5(还有三位随机数,进行忽略)
3.应用场景:需要去掉连续重复的数字或者字符的数组。
#include
using namespace std;
int main(){
int a[13]={10,10,10,4,2,4,3,3,4,1,1,4,1};
char b[10] = {'a','a','b','c','v','a','a','b','c','v'};
int n = unique(b,b+13)-b;//求得去重后,剩余的个数
//全部输出:
for(int i=0;i<10;i++)
cout<
reverse(it, it+a)可以将数组指针在[it, it+a)之间的元素或容器的迭代器在[it, it2)范围内的元素进行反转
a=需要反转数的个数
代码:
整型数反转:
#include
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
using namespace std;
int main()
{
char a[10]={"abcdefghi"};
reverse(a,a+9);
puts(a);
return 0;
}
结果:
fill(it,it+n,a)可以把数组或容器中的某一段区间赋为某个相同的值。和memset不同,这里的赋值可以是数组类型对应范围中的任意值。
n==赋值的个数
n==赋值的内容
代码:
#include
using namespace std;
int main()
{
int a[5]={1,5,6,7,3};
char b[10];
//字符型
fill(b,b+10,'q');
//整形
fill(a,a+5,999);//将a[0]~a[4]赋值3为999
for(int i=0;i<5;i++)
printf("%d ",a[i]);
cout<
结果:
注意:
使用条件:排好序
从数组的begin位置到end-1位置二分查找第一个大于等于num的数组,找到返回该数组地址,不存在则返回end。通过返回的地址减去起始地址begin,得到数字在数组中的下标。
代码:
#include
using namespace std;
int main()
{
int x;//下标
int key;
int a[5];
for(int i=0;i<5;i++)
cin>>a[i];
cin>>key;//需要查找的元素
sort(a,a+5);
for(int i=0;i<5;i++)
cout<
结果:
abs()用于整型求绝对值,fabs()用于浮点型
#include
#include
using namespace std;
int main()
{
int a=-199;
float b=-1.6;
cout<
结果:
doule pow(base,exp):函数返回以参数base 为底的exp 次幂。如果base为零或负和exp 小于等于零或非整数时,产生域错误。如果溢出,产生范围错误。
sqrt(base):函数返回参数num的平方根。如果num为负,产生域错误。
#include
#include
using namespace std;
int main()
{
cout<
结果:
swap()函数能将a,b两个参数的值交换(目前没有发现不能交换的类型)
#include
#include
using namespace std;
int main()
{
int a=10,b=99;
string st1 = "你好吗?";
string st2 = "你他妈的!";
swap(st1,st2);//string类型也可以
swap(a,b);
cout<<"a = "<
效果: