【输入】极速读取

众所周知 c++中的cin因为要保存缓冲的缘故速度比scanf慢

默认情况 C++标准streams(cin,cout,cerr...)与相应的C标准程序库文件(stdin,stdout,stderr)同步,也就是是否使用相同的stream缓冲区,但由于同步会带来某些不必要的负担,因此我们可以利用以下函数取消同步

std::ios::sync_with_stdio(false);   


 

实验证明 当数据量n在10^6以上时 没有关同步的cin比scanf至少慢上一倍  而关闭同步后的cin事实上比scanf更快

注意:关闭同步的方法只对C++适用 对G++不适用(有些平台可能会不支持c++关闭同步)  并且关闭同步后不能再cin与scanf混用(可能造成顺序错误)

 

接下来给大家介绍一种比scanf和cin关闭同步更快的读取整形数的方法 即利用getchar代替scanf  代码如下

inline bool get(int &t)
{
    bool flag = 0 ;
    char c;
    while(!isdigit(c = getchar())&&c!='-') if( c == -1 ) break ;
    if( c == -1 ) return 0 ;
    if(c=='-') flag = 1 , t = 0 ;
    else t = c ^ 48;
    while(isdigit(c = getchar()))    t = (t << 1) + (t << 3) + (c ^ 48) ;
    if(flag) t = -t ;
    return 1 ;
}


注意:加入头文件 cctype

这里get(t)==scanf("%d",&t)

实验证明 用getchar代替scanf读取整数时会提高好几倍的效率 而读取负数时影响则不是太大

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值