天天看點

輸入輸出挂

題外話:

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

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

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

當然輸入輸出外挂一般用在大量輸入輸出的情況下,這樣成本效益才高一些,否則得不償失(犧牲了代碼長度而換來了微不足道的效率提升)。

inline int Scan()
{
    int r = 0,f = 1;
    char ch = getchar();
    while(ch < '0' || ch > '9') {if(ch == '-')f = -1;ch = getchar();}
    while(ch >= '0' && ch <= '9') {r = r * 10 + ch - '0';ch = getchar();}
    return r * f;
}

inline void Print(int x)
{  
    if(x<0){x=-x;putchar('-');}  
    if(x>9) Print(x/10);  
    putchar(x%10+'0');  
}