c++使用cin、cout與c中使用scanf、printf進行輸入輸出的效率問題


   在c++中,我們使用cin和cout進行輸入輸出會比用scanf和printf更加簡潔和方便,但是當程序有大量IO的時候,使用cin和cout進行輸入輸出會比用scanf和printf更加耗時,

在數據量較小時則無明顯差別。如果沒要求效率的話,用cin和cout或scanf和printf都行;但是如果有效率要求的話,就另說了,比如在刷OJ的時候經常會遇到超時的問題,

這時就要考慮程序的效率了。具體如下:

在有大量IO的情況下,如果你仍然想用cin、cout,也有一種辦法能解決效率問題,就是在主函數里面添加下面這條語句:

std::ios::sync_with_stdio_(flase);

   通常把這條語句放在主函數的開頭,作為第一條語句,以應對大量的IO,減少耗時。或者如果你不想用這種方法,那就直接用c里面的scanf和printf,

這也能大大減少耗時,不過別忘了包含頭文件<cstdio>。下面說一下為啥cin、cout會比scanf、printf更耗時(我也是在網上查了一些資料才了解的,如有不對之處,歡迎指正)

   cin耗時的一個重要原因就是 cin與stdin(標准輸入輸出)總是同步的,cin在內部實現的時候會同步輸入到緩存區,輸入流會時刻與輸入緩沖保持同步,這就產生很多額外開銷,

從而在有大量IO時,就會很耗時。在上面的例子中我們添加了一條語句: std::ios::sync_with_stdio_(flase); 就能減少耗時,這是因為有了這條語句后,系統就會取消與stdin同步,

從而可以適當提高效率,但是與scanf相比還是差了一點。

   另外再說一下cout,它和cin是有點類似的。cout在輸出的時候並不是是直接輸出,而是先將要輸出的數據放入緩存區,這就會產生額外開銷,更加耗時;而printf在輸出的時候

是直接調用系統來進行輸出的,不需要緩存,所以cout會比printf更慢。

   下面的這個鏈接寫的挺好的,也更詳細:https://blog.csdn.net/ShannonNansen/article/details/76090172   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM