在ACM程序设计中我们常需要对数组进行一系列初始化赋值的操作,全部清空或者全部设置为最大值(一个你想指定的值),其中fill函数和memset函数最为常见,以下给出两个函数的常用方法和对比
-
memset包含在头文件cstring/string.h当中,分别隶属于c++/c的两个头文件
因为memset赋值时按照字节填充,所以更适合给char类型的数组赋值(一维/二维),因为在c/c++中char占用1一个字节(8位),而int占用2个字节,如果要使用memset给int赋值只适用于0,-1,但还有一种巧妙的方法,如果要将一个数组(一维/二维)全部赋值一个很大的值也可以通过将这个最大值M设置为0x3f3f3f3f(这是一个很巧妙的数字具体有兴趣的童鞋可以去查一下原因哦)
memset使用代码:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int M=0x3f3f3f3f;
int main(){
char a[20][20];
char b[20];
int c[20][20];
int d[20];
for(int i=1;i<=3;i++){
a[i][i]='a';
b[i]='a';
}
memset(a,'b',sizeof(a));
memset(b,'b',sizeof(b));
memset(c,M,sizeof(c));
memset(d,M,sizeof(d));
cout<<"a[3][3]="<<a[3][3]<<endl;
cout<<"b[3]="<<b[3]<<endl;
cout<<"c[3][3]="<<c[3][3]<<endl;
cout<<"d[3]="<<d[3]<<endl;
return 0;
}
测试结果显示成功调用了memset函数对char数组和int数组进行赋值:
-
fill包含在头文件algorithm当中,可以给数组赋值任意数
- fill(a,a+n,你想要赋值的数);
- fill(a[0],a[0]+n*n,你想要赋值的数);
代码如下:
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int a[20];
fill(a,a+20,20);
cout<<"a[2]="<<a[2]<<endl;
int b[20][20];
fill(b[0],b[0]+20*20,10);
cout<<"b[2][2]="<<b[2][2]<<endl;
return 0;
}
fill测试结果如下: