zoukankan      html  css  js  c++  java
  • 使用std::ios::tie与std::ios_base::sync_with_stdio加速流

    1. std::ios_base::sync_with_stdio

    static bool sync_with_stdio( bool sync = true );  

      与cstdio流[静态]切换同步

        打开或关闭所有的标准iostream流与它们对于的标准C流之间的同步。

        实际上,这意味着C++和C流使用相同的缓冲区,因此,可以自由地混合使用流。同步C++标准流可以确保线程安全。

        默认情况下,iostream对象和cstdio流同步。如果同步关闭,C++标准流独立地缓冲输入输出,在某些情况下,这是相当快速的。

      参数

        syn

        用于指示是否同步的布尔值,值为true开启同步,为false时关闭同步。

      返回值

        返回被调用之前的同步状态。当它第一次被调用,总是返回true。


      使用样例

    #include <iostream>
    #include <cstdio>
     
    int main()
    {
        std::cout.sync_with_stdio(false);
        std::cout << "a
    ";
        std::printf("b
    ");
        std::cout << "c
    ";
    }

       程序输出

    b
    a
    c

     

    2. std::ios::tie

        在默认的情况下cin绑定的是cout,c++11中cin和cerr都默认和cin绑定。

    3.

    1. 算法竞赛中,关闭iostream对象和cstdio流同步以提高输入输出的效率。

        即调用ios::sync_with_studio(false);    !特别注意:关闭后C++ IO与C IO不能混用,cin不能与scanf,sscanf, getchar, fgets等混用,cout不能与printf,puts等混用,否则IO会混乱。

    2. 在默认的情况下cin绑定的是cout,每次执行 << 操作符的时候都要调用flush,这样会增加IO负担。可以通过tie(0)(0表示NULL)来解除cin与cout的绑定,进一步加快执行效率。              即调用std::cin.tie(0);

    1     #include <iostream>
    2     int main() 
    3     {
    4         std::ios::sync_with_stdio(false);
    5         std::cin.tie(0);
    6         // 下面进行IO
    7     }

    可参见BYVoid的博客的详细测试: https://www.byvoid.com/blog/fast-readfile/

    4. 其它加速方法

        使用' '或者" "代替endl。即使用cout<<' ';和cout<<" ";

  • 相关阅读:
    监控系统
    RocketMQ入门介绍
    Linux的虚拟内存详解(MMU、页表结构) 转
    快速排序
    如何选择分布式事务解决方案? 转
    java 基本数据类型相关思考
    互联网项目中mysql应该选什么事务隔离级别 转
    线上服务的FGC问题排查,看这篇就够了! 转
    什么是Base64? 转
    业界难题-“跨库分页”的四种方案 转
  • 原文地址:https://www.cnblogs.com/cumulonimbus/p/5169943.html
Copyright © 2011-2022 走看看