码迷,mamicode.com
首页 > 移动开发 > 详细

std::ios::sync_with_stdio和tie()——给cin加速

时间:2018-10-31 23:25:28      阅读:380      评论:0      收藏:0      [点我收藏+]

标签:overflow   nullptr   etc   pad   one   ptr   技术分享   cccccc   技术   

平时在Leetcode上刷题的时候,总能看到有一些题中最快的代码都有这样一段

 

static const auto init = []() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    return nullptr;
}();

有时候偏偏算法是一样的,但是速度要比没有这段代码的快很多;

查了一下这段代码其实是给cin加速的,也就是说上面提到的题应该是碰到的大数据的输入,而cin cout要比scanf  printf慢很多,很容易就time error了;

这应该也是一些acm dalao用printf scanf而不用cincout的原因吧;

 

具体是:

  1. C++为了让cin cout和scanf printf 同时使用时不产生混乱,所以c++用一个缓冲区来同步c的标准流,
    而std::ios::sync_with_stdio(false)可以关闭这一个同步,让cin和cout不经过缓冲区;
  2. tie()函数是把两个stream绑定到一起,flush()是把缓冲区的数据输出到文件,而cin和cout是默认绑定在一起的,
    每次使用都会调用flush(), 而cin.tie(nullptr)可以解除这个绑定;
  3. cin和cout默认绑定在一起,是为了防止cin出现在cout之前,在绑定后,
    每次cin都会先把缓冲区的数据刷新到输出文件中

 

 

 

今天也碰到了一个大数据输入的题:

技术分享图片 

 

嘛,其实这里主要是算法的问题;

 

改进之后,这里还没用上述的代码:

 

技术分享图片

 

使用之后:

技术分享图片

 

还是有效果的;

std::ios::sync_with_stdio和tie()——给cin加速

标签:overflow   nullptr   etc   pad   one   ptr   技术分享   cccccc   技术   

原文地址:https://www.cnblogs.com/mckc/p/9886378.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!