std::ios::sync_with_stdio(false)的运用
生活随笔
收集整理的這篇文章主要介紹了
std::ios::sync_with_stdio(false)的运用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
c++中cin,cout效率比較低,是因為先把要輸出的東西存入緩沖區與C語言中的stdio同步后,再輸出,導致效率降低,而這段語句的作用是取消緩沖區同步,直接使用,由此可節省時間,使效率與scanf與printf相差無幾。
但需要注意的一點是,因為取消與stdio的同步之后,就不建議再使用 printf 與 scanf了,否則實際輸出就會與預期不符。只能用cin 與 cout
讀入外掛
當遇到坑的題scanf都過不了的時候就用這個,不過這樣的情況一般都是代碼效率問題。
#include <bits/stdc++.h> using namespace std; inline int Scan() //inline為內聯函數,目的是預處理,可減少時間 {int res = 0, ch, flag = 0;if((ch = getchar()) == '-') //判斷正負flag = 1;else if(ch >= '0' && ch <= '9') //得到完整的數res = ch - '0';while((ch = getchar()) >= '0' && ch <= '9' )res = res * 10 + ch - '0';return flag ? -res : res; } int main() {int n=Scan();printf("%d\n",n); }當然上面的也可以換成long long?類型的
cin的小技巧
ios::sync_with_stdio(false);
可以將cin和scanf的效率相匹敵。
詳情說明:
scanf在Linux平臺上測試結果為2.01秒
cinLinux平臺上測試結果為6.38秒
const int MAXN = 10000000; int numbers[MAXN]; void cin_read() { freopen("data.txt","r",stdin); for (int i=0;i<MAXN;i++) std::cin >> numbers[i]; }?cin慢是有原因的,其實默認的時候,cin與stdin總是保持同步的,也就是說這兩種方法可以混用,而不必擔心文件指針混亂,同時cout和stdout也一樣,兩者混用不會輸出順序錯亂。正因為這個兼容性的特性,導致cin有許多額外的開銷,如何禁用這個特性呢?只需一個語句std::ios::sync_with_stdio(false);,這樣就可以取消cin于stdin的同步了。
?
?
?
總結
以上是生活随笔為你收集整理的std::ios::sync_with_stdio(false)的运用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电信巨头爱立信在美认罪承认行贿,被罚款
- 下一篇: 任天堂公布 3 月马里奥日活动细节:推出