為什麼一定情況下scanf比cin快

2021-10-03 10:34:50 字數 499 閱讀 5485

有時候發現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++中兩者都能用。

C 在什麼情況下使用Using

第一種情況 using 命名空間,using指令 引用使用的外掛程式以及各種需要引用的檔案 第二種情況 using語句 用來簡化資源釋放的,在一定的範圍內有效。除了這個範圍時,自動呼叫idisposable介面的類才可以使用 例項 using sqlconnection conn new sqlco...

在什麼情況下用順序錶比鍊錶好

順序表 線性表的順序儲存結構的特點是邏輯關係上相鄰的兩個元素在物理位置上也相鄰,因此可以隨機儲存表中任一元素,儲存位置可用乙個簡單 直觀的公式表示。弱點是在插入或刪除操作時,需要移動大量元素。適用於需要訪問讀取大量元素,而幾乎不需要增添 刪除元素的程式。鍊錶 記憶體中位址不連續,失去了順序錶可隨機訪...

C 什麼情況下會產生臨時變數

臨時變數是只在呼叫期間有效,具有常性的一種變數。在返回值以值傳遞 傳值和傳指標 的形式返回時,會生成臨時變數。int sum int a,int b 編譯器會將結果a b的值拷貝給臨時變數,最終返回的是臨時變數 在函式呼叫中,如果形參是引用的型別的情況下 當實參和形參的型別不匹配會產生臨時變數 st...