【c++/c】fill和memset函数的区别

2019-04-28  本文已影响0人  程序员白泽
在ACM程序设计中我们常需要对数组进行一系列初始化赋值的操作,全部清空或者全部设置为最大值(一个你想指定的值),其中fill函数和memset函数最为常见,以下给出两个函数的常用方法和对比

因为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数组进行赋值:

memset.png

代码如下:

#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测试结果如下:

fill.png
上一篇下一篇

猜你喜欢

热点阅读