读入读出优化详解
读入读出优化:
我们都知道C++里有很多读入的方式,有iostream里的cin,和stdio里的scanf,在这两个读入函数中也是有着优劣之分的,cin的速度就远远不如scanf,因为cin在输入时关联了很多东西,拖慢了它的速度,我就先来讲一下如何将cin的速度提上去。
cin提速:
我们在输入前写这么一句话:std::ios::sync_with_stdio(false); 就可以将和cin关联的操作取消,这样就可以给cin提速,提速后的cin大概和scanf差不多。
getchar()优化:
这是最常用的读入方法了,C++里机器读取字符串的速度比读取数字的速度快上不少,我们可以将个数字分成一个一个数字字符来读入,运用乘法和加法来储存,这样就可以大大加快读入的速度,不要以为计算多了速度就慢了,它的速度大概时scanf的10倍之快。
我们先定义一个整形变量f=1,读入第一个字符,如果它是‘-’ 则f=-1,否则不变,将这个字符代表的数字的值放入x中,下面while,不断读入数据,对于新读入的数据,x=x*10+字符-‘0’;
循环条件是读入的这个字符是数字字符,如果不是就跳出,最后不要忘了x=x*f;确定正负,读入完毕。
Code:
void read(int &x) //&x的意思是取地址,如果函数里x的值改变,外面的值一起改变 { int f=1; char cz; cz=getchar(); if(cz=='-'){ f=-1; cz=getchar(); } while(cz<='9'&&cz>='0') { x=x*10+cz-'0'; cz=getchar(); } x*=f; }
下面是输出优化,不是很常用,使用递归将这个数输出(不用递归的话数输出来是反的),每次输出的数是n%10,然后n/=10;直接上代码;
Code:
void print(int y) { if(y<0) putchar('-'),y=-y; if(y>9) print(y/10); putchar(y%10+'0'); }
文章到此结束,谢谢观看。