一、背景
做題的時候,經常寫讀入優化,而讀入優化的核心是「getchar」,它比scanf快多了。
我不禁想,有沒有「putchar」呢?有。那麼有沒有輸出優化呢?它和printf和cout誰更快呢?
於是就寫下了這個驗證程式。
二、驗證
在網上搜了一下,主要有兩種輸出優化。
第一種是比較常見的:
inline void putint_usual(int x)
第二種是使用陣列的的:
inline void putint_array(int x)
; if (x<0) putchar('-'),x=-x;
buf[0]=0;
while (x) buf[++buf[0]]=x%10,x/=10;
if (!buf[0]) buf[0]=1,buf[1]=0;
while (buf[0]) putchar('0'+buf[buf[0]--]);
}
以上兩種的基本思路就是把這個數的每一位都求出來,然後依次用putchar輸出。
除此之外,c語言還自帶有printf,c++還有cout。
於是我寫了乙個程式。
#include#include#include#include#includeusing namespace std;
inline void pri(int p)
inline void putint_usual(int x)
inline void putint_array(int x)
; if (x<0) putchar('-'),x=-x;
buf[0]=0;
while (x) buf[++buf[0]]=x%10,x/=10;
if (!buf[0]) buf[0]=1,buf[1]=0;
while (buf[0]) putchar('0'+buf[buf[0]--]);
}inline void c(int p)
inline void putint_usual(int x)
inline void putint_array(int x)
; if (x<0) putchar('-'),x=-x;
buf[0]=0;
while (x) buf[++buf[0]]=x%10,x/=10;
if (!buf[0]) buf[0]=1,buf[1]=0;
while (buf[0]) putchar('0'+buf[buf[0]--]);
}inline void c(int p)
{ cout<
when t=5000000:
putint_array took 1.11 second
putint_usual took 0.16 second
printf took 0.88 second
cout took 1.11 second
綜上:還是使用輸出優化吧!
注意:以上結果是輸出在了freopen裡,但是如果不要freopen,直接在cmd裡輸出,會得到完全不一樣的結果!(輸出在cmd時,printf較快!)
讀入優化與輸出優化
c 是一門神奇的學科。在讀入 輸出時,我們經常用到 scanf cin printf cout 但是,在演算法競賽中,我們奉行乙個原則 效率第一!於是,便產生了各種各樣的奇技淫巧。下面的讀入與輸出優化就是其中之一。讀入優化 c 自帶的 scanf 已經很快了,但是100w的資料要0.6 0.8s,很...
python輸出重定向,原理與各類方法總結
背景 1.當我們在python中呼叫print obj時,事實上是呼叫了sys.stdout.write obj n print 將你需要的內容列印到了控制台,然後加了乙個換行符。2.當我們用 raw input input promption 時,事實上是先把提示資訊輸出,然後捕獲輸入 以下兩組在...
MapReduce JOB 的輸出與輸出筆記。
提高 mapreduce 價值,自定義輸入和輸出。比如 跳過儲存到 hdfs 中這個耗時的布置。而只是從 原始資料源接受資料,或者 直接將資料傳送給某些處理程式。這些處理 程式在 mapreduce 作業完成後使用這些資料。有時由檔案塊和輸入 split 組成的基礎 hadoop 正規化並不能滿足需...