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