在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