C++读入优化的黑科技
简述
平时写的快速读入,大多数是指一个一个字符读入,再转成数字。
但是有一种更快的方法:
强行读入整个输入文件,存在一个字符串里。
接着在这个字符串里利用快速读入转成数字。
速度非常快。
基本代码:
#include<****>
const int N=1<<27;//可以修改,表示输入文件不会超过的长度
char buf[N],*inf=buf;
int read(){//这是一个读不进负数的数字读入
int k=0;
while(!isdigit(*inf))++inf;
while(isdigit(*inf)){
k=k*10+(*inf-'0');
++inf;
}
return k;
}
int main(){
//freopen(***); //开文件必须在fread前面
fread(buf, 1, N, stdin);//读入整个输入文件
*****
return 0;
}
注意:不要用void read(int &),这样会更慢
效果
uoj里最快的代码用的一般都是黑科技读入。
我测试了一下:
先读入一个数n,接着读入n个数。
30%:n<=200000
70%:n<=2000000
100%:n<=10000000
评测环境:i5,4G的windows7下lemon开O2评测
fread快读的效果:
普通快读的效果:
scanf读入的效果:
看得出来,尤其是读入大数据时,fread快读比普通快读快非常多