輸入輸出速度統計

2022-05-02 15:21:10 字數 2336 閱讀 2892

在學校電腦上跑的檔案輸入輸出。

輸出:測試壹:輸出1e6內數字,空格隔開,printf vs cout

1.

freopen("

1.txt

","w

",stdout);

for(int i=1;i<=1000000;i++)

測試①:2.82

測試②:2.777

測試③:2.847

測試④:2.887

測試⑤:2.797

平均值:2.8256

2.

freopen("

1.txt

","w

",stdout);

for(int i=1;i<=1000000;i++)

測試①:0.1969

測試②:0.3226

測試③:0.2028

測試④:0.2309

測試⑤:0.1986

平均值:0.23036

小總結:出乎意料……我沒關stdout的同步啊,咋快這麼多……

測試貳:printf vs cout ,輸出1e6內數字,回車隔開

1.

freopen("

1.txt

","w

",stdout);

for(int i=1;i<=1000000;i++)

測試①:3.073

測試②:2.886

測試③:2.818

測試④:3.145

測試⑤:2.905

平均值:2.9654     小對比:空格和回車對於printf來說變化不大,畢竟只是格式化輸出,原理一樣。

2.endl換行

freopen("

1.txt

","w

",stdout);

for(int i=1;i<=1000000;i++)

測試①:3.565

測試②:3.382

測試③:3.568

測試④:3.353

測試⑤:3.458

平均值:3.4652

3.『\n』換行

freopen("

1.txt

","w

",stdout);

for(int i=1;i<=1000000;i++)

測試①:0.1914

測試②:0.1903

測試③:0.1917

測試④:0.188

測試⑤:0.1872

平均值:0.18972

小總結:怎樣,驚不驚喜,在未關stdout同步流下,<

進入c++庫里看一眼(雖然看不懂)可以看出來endl是乙個函式模板,在函式中輸出了'\n',與情理上來說呼叫一次函式確實要比只輸出乙個字元要慢。

1.將換行符寫入輸出流,並將與裝置關聯的緩衝區的內容刷到裝置中,保證目前為止程式所暫存的所有輸出都真正寫入輸出流。

2.清空輸出緩衝區。

好吧(這就涉及到我的知識盲區了

),endl確實幹了許多事情,但其實只有下劃線部分才是我們必須的,緩衝區的問題我們一會再說。

由此可見,以後別亂用 endl ……這會使你的輸出效率降低。

測試叄:cout 開關畢同步流 輸出1e7 ,空格隔開

1.

freopen("

1.txt

","w

",stdout);

for(int i=1;i<=10000000;i++)

測試①:2.269

測試②:1.822

測試③:2.413

測試④:2.247

測試⑤:2.624

平均值:2.275  (我另外多跑了幾次,發現好不穩定,最慢能到3.6,最快能到1.8,這個資料也算比較適中了)

2.

ios::sync_with_stdio(false

); freopen(

"1.txt

","w

",stdout);

for(int i=1;i<=10000000;i++)

測試①:2.594

測試②:2.635

測試③:2.122

測試④:2.398

測試⑤:2.067

平均值:2.3632 (這個波動也不小)

小總結:??為什麼開關同步流輸出一樣快?

好像這個同步流只跟讀入輸出放一起的時候才比較明顯?

常用技巧 輸入輸出優化 輸入輸出外掛程式

我們知道cin cout是比較慢的,不過它們可以加速。在 中加入這兩句即可 std ios sync with stdio false std cin.tie 0 加速過後cin的速度與scanf的速度近似 當然,加速過後就不要混用print和cout,scanf和cin了。因為不同步,後果會很嚴重...

uva oj java輸入輸出

真難的題目 狗屁演演算法 測資很機車 測驗結果 x.xx0 ms 測驗日期 200y mm dd author raymond wu 小璋丸 publicclassmain 載入單字的字元 while bytedata 1 else bytedata system.in.read catch exc...

檔案輸入 輸出

13.1 和檔案進行通訊 文字檢視和二進位制檢視 在文字檢視中,程式看到的內容和二進位制的內容可能不同,例如ms dos文字檔案用回車符和換行符的組合 r n來表示行尾,macintosh用乙個回車符 r來表示行尾。c程式使用乙個 n表示行尾。所以,如果c程式以文字檢視模式處理乙個ms dos文字檔...