C++快速读入法

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

发布了68 篇原创文章 · 获赞 15 · 访问量 8977

猜你喜欢

转载自blog.csdn.net/qq_43791377/article/details/104717551
今日推荐