C++快速读入法和ios::sync_with_stdio(false);

有时候我们会遇到“由于输入量很大,请使用快速输入法”之类的。
输入还要用快速的?是不是把平时我们使用的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);但是需要注意此时cinscanf不能混用,否则程序可能会出错。但最快的还是快读。
x详细请看[https://blog.csdn.net/qq_33248299/article/details/52144485](https://blog.csdn.net/qq_33248299/article/details/52144485)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值