C++读入优化的黑科技

简述

平时写的快速读入,大多数是指一个一个字符读入,再转成数字。 但是有一种更快的方法: 强行读入整个输入文件,存在一个字符串里。 接着在这个字符串里利用快速读入转成数字。 速度非常快。

基本代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#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快读比普通快读快非常多

文章目录
  1. 1. 简述
  2. 2. 基本代码:
  3. 3. 效果
|

博客使用Disqus作为评论系统