memset函数
用法:只能初始化成为0或者-1两个数值
#include <cstring>
memset(a, 0, sizeof(a));
memset(a, -1, sizeof(a));
fill函数
用法:可以使用任意数值填充固定区间
int a[10002];
fill(a, a+1000, 1);
fill(a, a+50, 123);
tip.
memset 和 fill 时间复杂度一样。
用法:只能初始化成为0或者-1两个数值
#include <cstring>
memset(a, 0, sizeof(a));
memset(a, -1, sizeof(a));
用法:可以使用任意数值填充固定区间
int a[10002];
fill(a, a+1000, 1);
fill(a, a+50, 123);
memset 和 fill 时间复杂度一样。
fill同样包含在cstring中吗
用#include<bits/stdc++.h> 不就没事了
我查了一下,memset比fill常数快,所以依情况而定吧
部分比赛用不了
6,用不了我会炸掉的,我一直用的#include<bits/stdc++.h>
memset也可以赋值 0x3f
这种最大值,主要用来赋初值的,memset在特定的情况下(赋初值0或-1)时比fill快很多,fill其实就是for(int i = a; i <= b; i++) arr[i] = c
,memset是按位赋值。关于通用性的话fill
确实比memset通用,但是你打比赛又不用赋值这种奇奇怪怪的值,一般就赋值 0,1,0x3f这种,综上,memset在竞赛中优于fill
memset能赋值所有数值(只要你数学够好)
不行的,memset
设计时就是为了初始化C风格的字符数组(即char
数组)
所以它是以1个字节的模式赋值整个数组
但int
是4个字节,long long
是8个字节
在执行memset(a,0x3f,sizeof a)
时
如果a是int
数组,a
中所有值都会变成0x3f3f3f3f
如果a是long long
数组,a
中所有值都会变成0x3f3f3f3f3f3f3f3f
所以我用vector+fill
听说vector+fill开O2跑得飞快
开O2时fill反而快
但€€£的老爷机开不了O2
听说€€£的评测机每秒运算次数是 10^{-7}