原創 各類輸出與輸出優化的比較

2021-07-30 03:44:58 字數 1646 閱讀 2747

一、背景

做題的時候,經常寫讀入優化,而讀入優化的核心是「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 正規化並不能滿足需...