cin效率

今天在刷LeetCode的时候,发现最快的代码和我的算法一模一样,但是多了两行:

std::ios::sync_with_stdio(false);
std::cin.tie(0);

我把这两行代码加到我的代码中,发现果然快了不少。所以我就好奇,这两行代码究竟是用来干嘛的呢?
查了一下才知道:

  1. 首先,C++为了保证与C的兼容,所以将cin和stdin(如scanf)的流进行了同步,以保证你在代码中混用这两个函数并不会出现任何问题(cout和stdout同理)。但这个同步会大大加大cin函数的耗时。
    而std::ios::sync_with_stdio(false)的作用就是,将iostream与stdio解绑。解绑之后,cin和cout的速度将会大大提升。
    但要注意的是,解绑之后,一定不要将iostream与stdio混用! 否则可能会出现问题。
  2. 其次,cin和cout也进行了绑定,关于这一点,我还并不是很了解。只是知道进行了绑定,然后用std::cin.tie(0)进行解绑,可以运行更快。
  3. 最后,由于某些我不太了解的原因,scanf仍然会比cin快一些,我认为可能是因为,scanf需要你指定类型,而cin可以自己判断类型,所以会慢一些。所以当有大量io操作的时候,如果解绑后速度仍然不尽如人意,不如将iostream都改成stdio试试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值