美文网首页
【c++/c】fill和memset函数的区别

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

作者: 程序员白泽 | 来源:发表于2019-04-28 11:05 被阅读0次
    在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数组进行赋值:

    memset.png
    • 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测试结果如下:

    fill.png

    相关文章

      网友评论

          本文标题:【c++/c】fill和memset函数的区别

          本文链接:https://www.haomeiwen.com/subject/lqgrnqtx.html