有时候我们会遇到“由于输入量很大,请使用快速输入法”之类的。
输入还要用快速的?是不是把平时我们使用的cin
换成scanf
?
不!还要更快!
getchar();
读取一个字符的getchar();这个比cin和scanf的读入还要快!
直接给出模板:
template<typename T>
inline void read(T &x)
{
x=0;
static int p;p=1;
static char c;c=getchar();
while(!isdigit(c)){if(c=='-')p=-1;c=getchar();}
while(isdigit(c)) {x=(x<<1)+(x<<3)+(c-48);c=getchar();}
x*=p;
return;
}
inline 是什么?简单说就是宏定义的升级版,定义后更省时
其中‘(x<<1)+(x<<3)’相当于x*=10;
x<<1=x * 2=x * 21
x<<3=x * 2* 2 * 2=x * 23
相当于乘法结合律 ax10=(ax2)+(ax8)
使用的时候,我们:
int n;
read(n);
注意:
以上的快速读入只能读入十进制整数,比如int ,long long int。
一般情况下把cin
改成scanf
都是可以过的,如果希望较小的功夫实现scanf和cin的等效可以在程序开头加一句:ios::sync_with_stdio(false);
但是需要注意此时cin
和scanf
不能混用,否则程序可能会出错。但最快的还是快读。
x详细请看[https://blog.csdn.net/qq_33248299/article/details/52144485](https://blog.csdn.net/qq_33248299/article/details/52144485)