cin读入很方便,但是在一些大数据的情况会非常慢,往往读文件成了程序运行速度的瓶颈,需要更快的读取方式。这时候一般有三种方法
1. 用scanf()
2. 关闭和stdio同步。
ios::sync_with_stdio(false);
这种方法让cin读入速度和scanf差不多
文件开头用了之后就可以放心用cin了
3. 自定义函数read()/fread();
这次我主要讲read()/fread();
const int MAXN = 10000000;
const int MAXS = 60*1024*1024;
int numbers[MAXN];
char buf[MAXS];
void fread_analyse()
{
freopen("data.txt","rb",stdin);
int len = fread(buf,1,MAXS,stdin);
buf[len] = '\0';
analyse(buf,len);
}
const int MAXN = 10000000;
const int MAXS = 60*1024*1024;
int numbers[MAXN];
char buf[MAXS];
void read_analyse()
{
int fd = open("data.txt",O_RDONLY);
int len = read(fd,buf,MAXS);
buf[len] = '\0';
analyse(buf,len);
}
打个比方,有人cin,scanf,read();分别读了10000000个数据,
cin是6.38秒;
关了同步之后是2.05秒;
scanf是2.01秒
而令人惊讶read()/fread()只用了0.29秒!
所以在以后读大数据之后一般应多用用read();