輸入輸出掛

2021-08-15 03:22:02 字數 3529 閱讀 4906

明明在c語言中有scanf()、printf(),c++中有cin、cout,為什麼我們還要用輸入輸出外掛程式呢?

這個問題很明顯,一定是因為這些輸入輸出函式功能過於強大而導致效率低,(很多時候,功能越強大的東西越臃腫),而我們使用的輸入輸出外掛程式既然叫外掛程式,那說明其一定有很大的優勢,而這方面優勢就體現在術有專攻上。原來的輸入輸出函式因為要應對不同型別的輸入輸出,所以內部一定做了很多的判斷,而我們在遇見實際問題時,往往都是對特定型別的進行輸入輸出,所以這些判斷就顯得無用且浪費資源。這時,我們的輸入輸出外掛程式也就有了存在的必要性,也就應運而生。

我們都知道,scanf()、printf()、cin、cout其實就是對其他一些基礎的獲取或輸出語句(getchar() putchar()等)進行封裝,而這些基礎的函式功能弱,效率高,所以我們的輸入輸出外掛程式也是仿照著scanf()、printf()、cin、cout來實現的,只不過做了針對性的改造,最終我們改造出來多種功能比scanf()等弱、比getchar()等強,效率比scanf()等高、比gerchar()等低的函式,從而達到針對性的作用,減少了不必要的資源消耗。

當然輸入輸出外掛程式一般用在大量輸入輸出的情況下,這樣價效比才高一些,否則得不償失(犧牲了**長度而換來了微不足道的效率提公升)。

大佬的:

#include using namespace std;

inline int read()

while (c>='0'&&c<='9') x=x*10+c-'0',c=getchar();

if (f) x=-x;

return x;

}

acm模版

template

inline

void scan_d(t &ret)

}

template

inline

bool scan_d(t &ret)

while (c != '-' && (c < '0' || c > '9'))

sgn = (c == '-') ? -1 : 1;

ret = (c == '-') ? 0 : (c - '0');

while (c = getchar(), c >= '0' && c <= '9')

ret *= sgn;

return1;}

template

inline

void print_d(t x)

putchar(x % 10 + '0');

}

int scan()

else

if(ch >= '0' && ch <= '9')

while ((ch = getchar()) >= '0' && ch <= '9')

return flag ? -res : res;

} void out(int a)

if (a >= 10)

putchar(a % 10 + '0');

} int main()

return

0;

}

template

bool scan_d(t &ret)

while (c! = '-' && c != '.' && (c < '0' || c > '9'))

sgn = (c == '-') ? -1 : 1;

ret = (c == '-') ? 0 : (c - '0');

while (c = getchar(), c >= '0' && c <= '9')

if (c == ' ' || c == '\n')

while (c = getchar(), c >= '0' && c <= '9')

ret *= sgn;

return1;}

template

inline

void print_d(int x)

putchar(x % 10 + '0');

}

char buf[maxin], *ps = buf, *pe = buf + 1;

inline

void rnext()

return ;

}template

inline

bool in(t &ans)

do} while (!isdigit(*ps) && ps != pe);

if (ps == pe)

dowhile (isdigit(*ps) && ps != pe);

ans *= f;

return

true;

}char bufout[maxout], outtmp[50], *pout = bufout, *pend = bufout + maxout;

inline

void write()

inline

void out_char(char c)

return ;

}inline

void out_str(char *s)

}return ;

}template

inline

void out_int(t x)

if (x < 0)

int len = 0;

while (x)

outtmp[len] = 0;

for (int i = 0, j = len - 1; i < j; i++, j--)

out_str(outtmp);

return ;

}

上面那個輸入正負整數的有點難用。 

再附乙個:

void

in(int &m)

}for (m = 0; ch >= '0' && ch <= '9'; ch = getchar())

if (flag)

}

暫時遇見這麼多,先這樣吧,也沒有找到其他更稀奇的外掛程式,等遇見了再做進一步的補充吧!

struct fastio

inline

int xchar()

if (pos == len)

return buf[pos++];

}inline

int xint()

if (c == '-')

for (; '0'

<= c && c <= '9'; c = xchar())

return x * s;

}~fastio()

}} io;

2017.8.29 新增 fastio

/*

* 空格作為分隔輸入,讀取一行的整數

*/gets(buf);

int v;

char *p = strtok(but, " ");

while (p)

輸入輸出掛 Uva11462 Age Sort

例題17 年齡排序 age sort,uva 11462 照從小到大的順序輸出。輸入格式 輸入包含多組測試資料。每組資料的第一行為整數n 0 n 2 000 000 即居民總數 下一行包含n個不小於1 不大於100的整數,即各居民的年齡。輸入結束標誌為n 0。輸入檔案約有25mb,而記憶體限制只有2...

hdu6178 bfs 輸入輸出掛

這道題是2017的多校第10場的1008.在一棵樹上選取最小的邊集使得有k個節點每個節點都和至少乙個其他節點相連線。了解二分匹配的話,很容易想到最優的情況肯定包含了最大二分匹配。而求一顆樹的最大二分匹配,並不需要什麼演算法,只要從葉子節點暴力 每個節點若它的父親不在點集內則將這條邊加入邊集 就可以,...

常用技巧 輸入輸出優化 輸入輸出外掛程式

我們知道cin cout是比較慢的,不過它們可以加速。在 中加入這兩句即可 std ios sync with stdio false std cin.tie 0 加速過後cin的速度與scanf的速度近似 當然,加速過後就不要混用print和cout,scanf和cin了。因為不同步,後果會很嚴重...