使用std::ios::tie与std::ios_base::sync_with_stdio加速流

1. std::ios_base::sync_with_stdio
ios

static bool sync_with_stdio( bool sync = true );  

  与cstdio流[静态]切换同步c++

    打开或关闭全部的标准iostream流与它们对于的标准C流之间的同步。算法

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

    默认状况下,iostream对象和cstdio流同步。若是同步关闭,C++标准流独立地缓冲输入输出,在某些状况下,这是至关快速的。测试

  参数spa

    syn线程

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

  返回值code

    返回被调用以前的同步状态。当它第一次被调用,老是返回true。对象


  使用样例

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

   程序输出

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. 其它加速方法

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

相关文章
相关标签/搜索