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试试。
原创文章 34 获赞 41 访问量 5966

猜你喜欢

转载自blog.csdn.net/qq_44844115/article/details/89340002
cin
今日推荐