日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

std::ios::sync_with_stdio(false)的运用

發布時間:2023/12/15 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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秒

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]; }

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的同步了。
?

const int MAXN = 10000000; int numbers[MAXN]; void cin_read_nosync() { freopen("data.txt","r",stdin); std::ios::sync_with_stdio(false); for (int i=0;i<MAXN;i++) std::cin >> numbers[i]; }

?

?

總結

以上是生活随笔為你收集整理的std::ios::sync_with_stdio(false)的运用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。