别用memset了

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.

memsetfill 时间复杂度一样。

2 个赞

fill同样包含在cstring中吗

用#include<bits/stdc++.h> 不就没事了

我查了一下,memset比fill常数快,所以依情况而定吧

部分比赛用不了

1 个赞

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

1 个赞

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跑得飞快

1 个赞

开O2时fill反而快
但€€£的老爷机开不了O2

听说€€£的评测机每秒运算次数是 10^{-7}