C 快讀快寫詳解

2021-09-26 04:14:11 字數 3147 閱讀 2575

#define usefasterread 1

#define rg register

#define inl inline

#define debug printf("qwq\n")

#define debugd(x) printf("var %s is %lld", #x, ll(x))

#define debugf(x) printf("var %s is %llf", #x, double(x))

#define putln putchar('\n')

#define putsp putchar(' ')

#define rep(a, s, t) for(rg int a = s; a <= t; a++)

#define repdown(a, t, s) for(rg int a = t; a >= s; a--)

typedef

long

long ll;

typedef

unsigned

long

long ull;

#include

#if usefasterread

char in[

1<<20]

,*ss = in,

*tt = in;

#define getchar() (ss == tt && (tt = (ss = in) + fread(in, 1, 1 << 20, stdin), ss == tt) ? eof : *ss++)

#endif

namespace io

inl ll read()

inl void

write

(ll x)

if(x >=10)

write

(x /10)

;putchar

(x %10+

'0');}

inl void

writeln

(ll x)

inl void

writesp

(ll x)

}using

namespace io;

template

<

typename t>

inline t max

(const t& x,

const t& y)

template

<

typename t>

inline t min

(const t& x,

const t& y)

template

<

typename t>

inline

void

swap

(t& x, t& y)

template

<

typename t>

inline t abs

(const t& x)

struct io

voidrs(

)template

<

typename t>

inline io r

(t& x)

const

template

<

typename t>

inline io w

(t x)

const

if(x >=10)

w(x /10)

;putchar

(x %10+

'0')

;return

*this;}

template

<

typename t>

inline io wl

(const t& x)

const

template

<

typename t>

inline io ws

(const t& x)

const

inline io l()

inline io s()

}io;

只要在基本的快讀前加上

#define getchar() (tt == ss && (tt = (ss = in) + fread(in, 1, 1 << 20, stdin), ss == tt) ? eof : *ss++)

char in[

1<<20]

,*ss=in,

*tt=in;

in:用來快取輸入的東西的乙個緩衝區

ss:指向當前讀到的元素

tt:指向緩衝區的末尾

重定義的getchar()函式詳解:

1)若ss!=tt,代表緩衝區還沒讀完,直接返回*ss,然後再ss++即可

2)若ss==tt,代表緩衝區已經讀完

此時將ss重新賦值為in,然後tt賦值為ss+讀入了的元素個數

a.若此時還是ss==tt,說明讀入的字元個數為0,讀不出東西了,到了檔案末尾,返回eof(檔案末尾識別符號)

b.否則返回*ss,然後再ss++即可

此快讀使用注意:

1)這個快讀的效率不知道比系統自帶的getchar()高多少2333

2)根據題目所給的空間注意char in的大小,不要mle了!

3)此快讀一般用於檔案讀寫。若要使用控制台,則應該在輸入所有資料後使用ctrl+z輸入eof

4)考場上如果寫不對不如不寫,反正沒有哪個出題人喪心病狂到卡起了系統自帶的getchar()

5)使用了這個快讀,就不能用系統自帶的getchar(),scanf(),cin之類的輸入方法了(因為它是搬運檔案內容,一次搬一堆)

C 快讀快寫模板

感謝 eason ac 的指點,快讀 快寫將可以支援任意整型變數的輸入與輸出。由於快讀和快寫需要用到標頭檔案中的getchar 和putchar 函式,所以在 的開頭 入如下 include函式支援變數型別多樣,請在呼叫read 函式時在read與 之間加入 您要讀入的變數型別 例 int a re...

技巧 快讀快寫

inline int read 輸入方式 int main template inline void read t x for x 0 isdigit ch ch getchar x x 10 ch 0 if sign x x 輸入方式 int main inline char nc inline ...

快讀快寫 模板

include include include using namespace std int read while isdigit ch return s f void write int x if x 9 write x 10 putchar x 10 0 return int main 一些問...