在學校電腦上跑的檔案輸入輸出。
輸出:測試壹:輸出1e6內數字,空格隔開,printf vs cout
1.
freopen("測試①:2.821.txt
","w
",stdout);
for(int i=1;i<=1000000;i++)
測試②:2.777
測試③:2.847
測試④:2.887
測試⑤:2.797
平均值:2.8256
2.
freopen("測試①:0.19691.txt
","w
",stdout);
for(int i=1;i<=1000000;i++)
測試②:0.3226
測試③:0.2028
測試④:0.2309
測試⑤:0.1986
平均值:0.23036
小總結:出乎意料……我沒關stdout的同步啊,咋快這麼多……
測試貳:printf vs cout ,輸出1e6內數字,回車隔開
1.
freopen("測試①:3.0731.txt
","w
",stdout);
for(int i=1;i<=1000000;i++)
測試②:2.886
測試③:2.818
測試④:3.145
測試⑤:2.905
平均值:2.9654 小對比:空格和回車對於printf來說變化不大,畢竟只是格式化輸出,原理一樣。
2.endl換行
freopen("測試①:3.5651.txt
","w
",stdout);
for(int i=1;i<=1000000;i++)
測試②:3.382
測試③:3.568
測試④:3.353
測試⑤:3.458
平均值:3.4652
3.『\n』換行
freopen("測試①:0.19141.txt
","w
",stdout);
for(int i=1;i<=1000000;i++)
測試②:0.1903
測試③:0.1917
測試④:0.188
測試⑤:0.1872
平均值:0.18972
小總結:怎樣,驚不驚喜,在未關stdout同步流下,<
進入c++庫里看一眼(雖然看不懂)可以看出來endl是乙個函式模板,在函式中輸出了'\n',與情理上來說呼叫一次函式確實要比只輸出乙個字元要慢。
1.將換行符寫入輸出流,並將與裝置關聯的緩衝區的內容刷到裝置中,保證目前為止程式所暫存的所有輸出都真正寫入輸出流。
2.清空輸出緩衝區。
好吧(這就涉及到我的知識盲區了
),endl確實幹了許多事情,但其實只有下劃線部分才是我們必須的,緩衝區的問題我們一會再說。
由此可見,以後別亂用 endl ……這會使你的輸出效率降低。
測試叄:cout 開關畢同步流 輸出1e7 ,空格隔開
1.
freopen("測試①:2.2691.txt
","w
",stdout);
for(int i=1;i<=10000000;i++)
測試②:1.822
測試③:2.413
測試④:2.247
測試⑤:2.624
平均值:2.275 (我另外多跑了幾次,發現好不穩定,最慢能到3.6,最快能到1.8,這個資料也算比較適中了)
2.
ios::sync_with_stdio(false測試①:2.594); freopen(
"1.txt
","w
",stdout);
for(int i=1;i<=10000000;i++)
測試②: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文字檔...