cin关闭流同步的利弊与cout的endl使用

在算法题中涉及到大量数据读入的时候,通常建议大家避免使用cin读入数据而改用scanf,原因是scanf相对速度更快。

解决方法

1. cin效率低的原因一是在于默认cin与stdin总是保持同步,cin会把要输出的东西先存入缓冲区,进而消耗时间。通过关闭同步,可以有效提高cin效率;

2. 默认情况下cin绑定的是cout,每次执行<<的时候都要调用flush,进而增加IO负担,因此可以通过tie(0)解绑。

代码:

#include <iostream>
using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
}

 关闭同步之后,cin与scanf的执行效率相差无几

注意事项

如果在同一个流上使用两组 I/O 函数(头文件<stdio.h>/<cstdio>和<iostream>(例如stdin流同时关联cin与scanf),那么最好让它们保持同步;

如果任何一个流只使用一个 I/O 系列,则可以关闭同步(比如在各自涉及单独的流的情况下,可以同时使用scanf与cin)。

保险起见,关闭同步之后请不要同时使用C与C++的读写方式,避免不必要的麻烦。

cout中不要使用endl

每次使用endl,都要flush缓冲区,造成大量时间耗费。推荐cout << << "\n"的写法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AryCra_07

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值