为什么一定情况下scanf比cin快
生活随笔
收集整理的這篇文章主要介紹了
为什么一定情况下scanf比cin快
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有時候發現oj時完全沒錯的代碼死活過不了,超時超時搞得我頭炸掉,而且我敢保證代碼邏輯等的都是沒有問題的,就是超時。當時只想罵人,后來發現這是我在知識上的缺失。
scanf是用指針操作的,沒有類型安全機制。比如一個char類型數據你就可以用%f獲得輸入,而不會報錯,但在運行時會出現異常。
cin是自動判斷你的變量類型,比如一個char數據只能用默認的char方法取數據。
標準流對象cin/cout為了普適性,繼承體系很復雜,所以在對象的構造等方面會影響效率,因此總體效率比較低。
cin有許多額外的開銷,可以用std::ios::sync_with_stdio(false)或ios::sync_with_stdio(false);cin.tie(0);,這樣就可以取消cin于stdin的同步了。
不怎么去優化時,c++編譯器產生的代碼一般要比c編譯器產生的差。
而且用c++和c編譯器鏈接進去的頭文件也不相同,這些都要影響效率。
另外,C中只能用scanf,在C++中兩者都能用。
總結
以上是生活随笔為你收集整理的为什么一定情况下scanf比cin快的全部內容,希望文章能夠幫你解決所遇到的問題。