我們知道,cin/cout是很慢的,所以我們經常scanf/printf。但是如果要求更嚴格一些,速度要更快,該怎麼辦呢?有一種解決辦法,那就是——快速輸入輸出。
快速輸入輸出採用getchar()和putchar()函式,用了數字累加的方法輸入/輸出數。
我們也可以把快速輸入輸出定義成類,就像cin/cout一樣。
**如下:
#ifndef my_qio_h
#define my_qio_h
#include#include#define e_minus(i) pow(0.1,i)
#define e_plus(i) pow(10,i);
using std::getchar;
using std::pow;
using std::putchar;
//assistant function(al)s
struct precision_class;
prec_type operator () (int precision__);
return ans;
}}precision;
//qin
class q_istream
if(i==0 && c=='+') continue;
int_num*=10;
int_num+=c-48;
} if(is_nag) int_num=-int_num;
return *this;
} q_istream operator >> (long long &long_long_num)
if(i==0 && c=='+') continue;
long_long_num*=10;
long_long_num+=c-48;
} if(is_nag) long_long_num=-long_long_num;
return *this;
} q_istream operator >> (unsigned long long &unsigned_long_long_num)
if(is_nag) unsigned_long_long_num=-unsigned_long_long_num;
return *this;
} q_istream operator >> (double &double_num)
if(i==1 && c=='+') continue;
double_num*=10;
double_num+=c-48;
} for(int i=1;;++i)
if(is_nag) double_num=-double_num;
return *this;
}}qin;
//qout
class q_ostream
q_ostream operator << (int int_num)
while(i>0)
return *this;
} q_ostream operator << (long long long_long_num)
while(i>0)
return *this;
} q_ostream operator << (double double_num)
while(i>0)
} else putchar('0');
int_num=double_num;
if(double_num-int_num<=e_minus(precision)) return *this;
putchar('.');
long long long_long_num=(double_num-int_num)*e_plus(precision);
bool bef0=1;
while(i>0)
} return *this;
} q_ostream operator << (precision_class::prec_type precision_num)
}qout;
#endif
其實,快速輸出並不快,甚至比cout還要慢。
現在可以快速地輸入乙個數了!
好,我最後說一下使用方法。
快速輸入輸出
由於c 自帶的scanf有時候會被卡,自己寫一下輸入輸出會讓程式快很多,下面我用的是fread加速讀入.fread的速度是scanf,cin關同步指標的幾十倍,是普通read的2倍.讓程式跑得更快.為了看的時候方便,我把這些封裝在乙個namespace裡面,要用的時候呼叫就可以了.下面是 1 nam...
C 輸入輸出
一 標準輸入函式cin 不知道說它是個函式對還是不對,它是代表標準的輸入裝置 鍵盤。他是屬於流的,他的用法和流的用法是一樣的。也就是 cin 變數 小小的說明一下,輸入多個變數可以寫在一行,如 cin x y z 這樣寫不是不允許,而是不好看,如果是不同的變數型別,那就更是沒頭沒腦了。除了你,人家是...
C 輸入輸出
c語言不提供輸入輸出語句,輸入輸出操作有函式來實現。c的標準庫函式中提供了許多輸入輸出函式,如printf scanf 等,使用時需要新增相應的標頭檔案 scanf d num 逗號前為控制語句,後半部分為變數的位址。當中 d是輸入格式控制字串 scanf 函式在接受輸入資料是預設不採集空格,回車,...