c++给数组整体赋初值
memset是计算机中C/C++语⾔初始化函数。作⽤是将某⼀块内存中的内容全部设置为指定的值(⼆进制补码),这个函数通常为新申请的内存做初始化⼯作。
头⽂件:
#include<cstring>
memset()函数原型:extern void *memset(void *buffer, int c, int count) buffer:为指针或是数组; c:是赋给buffer 的值; count:是buffer的长度。
c的取值范围应该在0~~255,因为该函数只取ch的后⼋位赋值给你所输⼊的范围的每个字节。
cstring转为int⽐如int a[5]赋值memset(a,-1,sizeof(int )*5)与memset(a,511,sizeof(int )*5)所赋值的结果是⼀样的都为-1;因为-1的⼆进制码为(11111111 11111111 11111111 11111111)⽽511的⼆进制码为(00000000 00000000 00000001 11111111)后⼋位都为(11111111),所以数组中每个字节,如a[0]含四个字节都被赋值为(11111111),其结果为a[0](11111111 11111111 11111111 11111111),即a[0]=-1,因此⽆论ch多⼤只有后⼋位⼆进制有效,⽽后⼋位的范围在(0~255)中改。
使⽤⽅法:memset函数按字节对内存块进⾏初始化,所以不能⽤它将int数组初始化为0和-1之外的其他值(除⾮该值⾼字节和低字节相同)。
int q[100];
(1)赋值为-1
memset(q,-1,sizeof(q))和memset(q,255,sizeof(q))以及memset(q,0xff,sizeof(q));是等价的,都是给q数组赋值-1.
(2)赋值为0
memset(q,0,sizeof(q))
(3)赋其它值
memset(q,-127,sizeof(q));和memset(q,0x81,sizeof(q))是等价的,赋值后q[1]=-2122219135
原理:-127转换成⼆进制为111111111(原码),它的补码10000001,填充int的4个字节为10000001 10000001 10000001 10000001,
⽽10000001 10000001 10000001 10000001的补码为:11111110 01111110 01111110 01111110
10000001 10000001 10000001 10000001的原码为(补码加1):11111110 01111110 01111110 01111111(最⾼位的1是符号位,不取反)
2.fill
fill(q,q+3,5);//给q数组的q[0],q[1],q[2]赋值为5
头⽂件:#include<algorithm>
格式:fill(初始位置first,最终位置last,值) //填充范围为[first,last)
(备注:fill⼤家在竞赛中使⽤较少,原因不详,据说是速度太慢。)
(⽆关内容:long long在考试中如果使⽤printf输出,则可以⽤LLd控制)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论