memset与fill,慎用memset,一般用fill

总述: fill() 和 menset() 两者看似相等,但两者却有巨大的区别,在fill()中 ,它的原理是把那一块单元赋成指定的值,也就是说任何值都可以,而在memset(),则是将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值

一:memset:
void *memset(void *s,int c,size_t n)
总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。
例如
1.memset(dis,255,sizeof(dis));
将前sizeof(dis)字节的空间赋值为-1(255的补码是-1,计算机用补码表示数字)
2.memset(dis,0,sizeof(dis));
将前sizeof(dis)字节的空间赋值为0
3.memset(dis,-1,sizeof(dis));
将前sizeof(dis)字节的空间赋值为-1
4.memset(dis,127,sizeof(dis));
将前sizeof(dis)字节的空间赋值为2139062143
综上,要慎用memset,一般只用来清零或置为-1(-2都不行,负数除了-1都不行)
https://blog.csdn.net/qq_42592097/article/details/81947072
https://blog.csdn.net/hk121/article/details/81096388
https://baike.baidu.com/item/memset/4747579?fr=aladdin

二:fill:
fill()函数参数:fill(first,last,val);
// first 为容器的首迭代器,last为容器的末迭代器,val为将要替换的值。

int a[200];
fill(a, a+100, 1);
fill(aa.begin(), aa.end(), 2);

注意:
fill()中 ,它的原理是把那一块单元赋成指定的值,也就是说任何值都可以 。memset(),则是将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,即0 、1。
https://blog.csdn.net/weixin_40799076/article/details/84532083
https://blog.csdn.net/yujin753/article/details/41487181
https://blog.csdn.net/g19ly/article/details/75245055

你可能感兴趣的:(C语言,OJ刷题,模板)