美文网首页
LeetCode通过关闭缓冲区同步加速

LeetCode通过关闭缓冲区同步加速

作者: LaLa_2539 | 来源:发表于2019-08-09 14:43 被阅读0次

    在LeetCode许多最优解法的代码中都会有如下代码:

    static const auto io_sync_off = []()
    {
        // turn off sync
        std::ios::sync_with_stdio(false);
        // untie in/out streams
        std::cin.tie(nullptr);
        return nullptr;
    }();
    

    其中 std::ios::sync_with_stdio(false) 的作用是取消缓冲区同步,因为 printf()/scanf() 是C函数,而 cin/cout 是C++函数,这些函数需要用到各自的缓冲区,为了防止各自的缓冲区错位,C++默认将C函数和C++函数的缓冲区同步。当你设置成std::ios::sync_with_stdio(false)后C++就会取消同步,这会提高cin/cout的运行速度,代价是不能和printf()/scanf()混用,否则会因不同步而出现问题,所以在这种情况下整个程序切记不可将cin/cout和printf()/scanf()混用。

    代码解释

    如上代码属于lambda捕获的内容(《C++ Primer》P345)

    C++ 11 Lambda表达式

    https://www.cnblogs.com/DswCnblog/p/5629165.html

    这里需要注意一个问题,在《C++ Primer》P347中说明了如果 *lambda* 的函数体包含任何单一return语句之外的内容,且未指定返回类型,则返回void,但是以上代码依然可以通过编译

    解释:http://www.imooc.com/wenda/detail/332769

    相关文章

      网友评论

          本文标题:LeetCode通过关闭缓冲区同步加速

          本文链接:https://www.haomeiwen.com/subject/iyqhjctx.html