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

2019-08-09  本文已影响0人  LaLa_2539

在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

上一篇下一篇

猜你喜欢

热点阅读