1. std::ios_base::sync_with_stdio
与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<<" ";