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快读的效果: 
 普通快读的效果: 
看得出来,尤其是读入大数据时,fread快读比普通快读快非常多