讀入優化 輸出優化 C 詳解

2022-08-05 04:27:12 字數 1198 閱讀 6609

讀入優化&輸出優化 (c++) 詳解

本文主要介紹了c++讀入和輸出的一些性質和優化

希望對讀者有所幫助

大家對這個應該很熟悉了吧?想必最開始接觸 \(oi\) 的時候大家寫的輸入輸出就是用的這個吧。

其實你做多了題目就會發現這個 \(cin\) 和 \(cout\) 是非常慢的,因為它從緩衝區中讀入資料。

而這個緩衝常常是同步的,因為它還需要辨別輸入型別。

為了加速這個東西,所以我們可以在**中加入這樣一句話,意為關閉同步流:

ios::sync_with_stdio(false);
然後再次使用 \(cin\) 和 \(cout\) 就會變得很快了。

但是在大量的資料面前,它的表現仍然不夠出色,常常有 \(tle\) 的存在。

這個東西應該是大多數較為自身的\(oler\) 在用的東西了。

因為它還要加上什麼格式符而為廣大初學者所不喜歡。

但是它也有乙個壞處,相信很多做過字串題目的 \(oler\) 應該清楚,這個scanf可能讀入乙個換行符!

這裡解釋下原因:\(linux\) 和 \(windows\) 下換行符是不一樣的!

至於**不一樣讀者可以查閱網上資料,這裡只做原因解釋,因此如果讀入字元且有換行之類,建議讀一句

scanf("\n");
然後就沒有什麼好說的了 \(qaq\)

因為它還不夠快!

這兩個函式就不要期望 c++ 還會給你配置了,為了更快的讀入,只能手寫了咯

原理:\(getchar()/putchar()\)速度較快。

我們按照高精度的方式,可以把數字當做字元讀入/輸出,最後再轉化為數字,這樣會更快。

那麼我們模擬實現即可:

inline void read() 

inline void output(int x) putchar('\n');

}

裡面運用\(x=(x<<3)+(x<<1)+(c \text 48)\)是因為位運算會快於四則遠算。

至於這邊可以採用 \(c \text 48=c-48\),因為 \(0\) 的 二進位制 下編碼為 \(48\),你會發現 \(0-9\) 的 二進位制表示 在 \(48\) 的二進位制下表示剛好錯開。

我們剛好可以利用這個性質進行優化,對於輸出自然是一樣。

顧名思義,超級快讀和超級快輸。

讀入優化 輸出優化

注意了注意了注意了,重要的事情說3遍,這個東西是騙分神器,騙分神器,騙分神器!眾所周知 scanf比cin快得多,printf比cout快得多,如果你不知道就 就現在知道了 那有沒有更快的呢?當然。請看 好吧,這就是讀入優化的效果,在資料很恐怖的情況下能比scanf多過1 5個點 比如說這種 都說了...

讀入輸出優化

1 void read int x 表示引用,也就是說x是乙個實參,在函式中改變了x的值就意味著在外面x的值也會被改變212 while s 0 s 9 是字元 一旦不是字元就意味著輸入結束了 1317 x f 改變正負 18 1 void print int x 這裡不用實參28 if x 9 只...

讀入優化和輸出優化

前兩天做牛客的題 才知道有這麼個玩意。果然還是太菜 大佬們打比賽是去切題 我是去認識新名詞。題目也很直白 說了 讀入檔案較大,請使用讀入優化,本機除錯時請使用檔案輸入輸出而且題目 也給出了優化寫法 可以直接用 非常良心 inline int read while c 0 c 9 x x 10 c 0...