1.memset數組
memset是計算機中C/C++語言初始化函數。做用是將某一塊內存中的內容所有設置爲指定的值, 這個函數一般爲新申請的內存作初始化工做。函數
頭文件:spa
#include<cstring>
3d
memset()函數原型:extern void *memset(void *buffer, int c, int count) buffer:爲指針或是數組; c:是賦給buffer的值; count:是buffer的長度。指針
c的取值範圍應該在0~~255,由於該函數只取ch的後八位賦值給你所輸入的範圍的每一個字節。code
好比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)中改。orm
使用方法:memset函數按字節對內存塊進行初始化,因此不能用它將int數組初始化爲0和-1以外的其餘值(除非該值高字節和低字節相同)。blog
int q[100];內存
(1)賦值爲-1get
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 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控制)