zoukankan      html  css  js  c++  java
  • 提高标准输入输出流的速度

    在刷leetcode时,看到前面快的solution加上了如下代码:

    static int __ = [](){
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        return 0;
    }();
    

    自己加上后,发现速度提升不少,百度查了一下,上面避免了两个因素。

    std::ios::sync_with_stdio(false);

    iostream默认是与stdio关联在一起的,以使两者同步,因此消耗了iostream不少性能。C++中的std :: cin和std :: cout为了兼容C,保证在代码中同时出现std :: cin和scanf或std :: cout和printf时输出不发生混乱,所以C++用一个流缓冲区来同步C的标准流。通过std :: ios_base :: sync_with_stdio函数设置为false后可以解除这种同步,让std :: cin和std :: cout不再经过缓冲区,iostream的性能就会提高了很多倍。因此,当解除同步之后,注意不要与scanf和printf混用以免出现问题。[1]

    std::cin.tie(nullptr);

    std :: cin默认是与std :: cout绑定的,所以每次操作的时候(也就是调用”<<”或者”>>”)都要刷新(调用flush),这样增加了IO的负担,通过tie(nullptr)来解除std :: cin和std :: cout之间的绑定,来降低IO的负担使效率提升。[2]

    参考

    【1】https://blog.csdn.net/Canger_/article/details/85787436
    【2】https://blog.csdn.net/b__t__t/article/details/84868841

  • 相关阅读:
    深入理解java异常处理机制
    i2c总线
    运行时类型识别(RTTI)
    bcg界面库总结
    c++ 虚函数表
    宽字符,宽字符串
    c++异常处理
    内存管理
    c++中使用联合体
    MFC自定义消息
  • 原文地址:https://www.cnblogs.com/fydeblog/p/12087891.html
Copyright © 2011-2022 走看看