有时候我们会遇到“由于输入量很大,请使用快速输入法”之类的。
输入还要用快速的?是不是把平时我们使用的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;
}
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。