C++ fill和memset函数的区别
两者的定义
-
fill函数
-
fill(数组初始地址,数组末尾地址,字符)
-
将数组按块填充字符或数字
-
-
memset函数
- memset(数组初始地址,字符,字节数)
- 按照字节赋值
两者的区别
-
fill函数可以赋任何值,vector容器也可以。
//数组赋值 int main () { int a[maxn]; fill(a,a+maxn,2); for(int i = 0;i<maxn;i++){ cout<<a[i]<<" "; } return 0; }
答案是 2 2 2 2 2 2 2 2 2 2
//vector赋值 int main () { vector<int> a (10); fill (a.begin(),a.begin()+4,1); fill (a.begin()+3,a.end()-2,2); for (vector<int>::iterator it=a.begin(); it!=a.end(); ++it) cout << *it<<" "; return 0; }
答案是1 1 1 2 2 2 2 2 0 0
-
memset只能赋值字符或者0和-1
int main () { int a[maxn]; memset(a,-1,sizeof(a)); for(int i = 0;i<maxn;i++) cout<<a[i]<<" "; return 0; }
答案是-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-
因为memset是按照字节来进行赋值的,一个int类型为4个字节,每个字节都赋值相同的值,而0是为00000000和-1同理字符相同。一个char类型是1个字节,所以赋值成功。