C ++読ん最適化汎用テンプレート

構造体ioss 
{ 
  の#define ENDL '\ n'は
     静的 のconst  int型 LEN = 20000000 チャー OBUF [LEN]、* OH = OBUF。
    std :: streambufの *のFB; 
    ioss()
    { 
        IOS :: sync_with_stdio()。
        cin.tie(NULL)。
        cout.tie(NULL)。
        FB = cout.rdbuf()。
    } 
    インラインチャーGC()
    { 

        静的 チャー BUF [LEN] * S * T、BUF2 [LEN]。
        リターン(S == T)&&(T =(S = BUF)+関数fread(BUF、1、LEN、STDIN))、S == T?- 1:* sの++ ; 
    } 
    インラインiossオペレータ >>(長い ロングX)
    { 
        静的 チャー CH、SGN、* P。
        CH = GC()、SGN = 0 以下のための(!; isdigit(CH); CH = GC())
        { 
            場合(CHの== - 1 を返す * この; 
            SGN | = CH == ' - '  ;
        }
        (X = 0 ; isdigit(CH)、CH = GC())
            X = X * 10 +(CH ^ ' 0 ' )。
        SGN &&(X = - X)。
        返す * これを
    } 
    インラインiossオペレータ >>(INTX)
    { 
        静的 チャー CH、SGN、* P。
        CH = GC()、SGN = 0 (!; isdigit(CH)、CH = GC())
        { 
            場合(CH == - 1を返す * これを
            SGN | = CH == ' - ' ; 
        } 
        のための(X = 0 ; isdigit(CH)、CH = GC())
            X = X * 10 +(CH ^ ' 0 ' )。
        SGN &&(X = - X)。
        返す * これを
    } 
    インラインiossオペレータ >>(チャーX)
    { 
        静的 チャーCH;
        にとって(;!はisalpha(CH)、CH = GC())
        { 
            場合(CHの== - 1 を返す * この
        } 
        のx =のCH。
        返す * これを
    } 
    インラインioss演算子 >>(ストリングX)
    { 
        静的 チャー CH、* P、BUF2 [LEN]。
        (;!はisalpha(CH)&& isdigit(CH); CH = GC())
             であれば(CHの== - 1 を返します *この; 
        P = BUF2。
        (;はisalpha(CH)|| isdigit(CH)、CH = GC())
             * P = CH、P ++ * P = ' \ 0 ' ; 
        X = BUF2。
        返す * これを
    } 
    インラインioss演算子 <<(ストリングC)
    { 
        ための(自動&P:C)
             この - > 演算子 << (P)。
        返す * これを
    }
    インラインioss演算子 <<(CONST  のchar *のC)
    { 
        ながら(* C =!' \ 0 ' 
        { 
            この - > 演算子 <<(* C)。
            C ++ ; 
        } 
        を返す * これを
    } 
    インラインioss演算子 <<(CONST  チャーC)
    { 
        OH == OBUF + LEN?(FB-> sputn(OBUF、LEN)、OH = OBUF):0 *ああ++ =C;
        返す * これを
    } 
    インラインioss演算子 <<(INT X)
    { 
        静的 INT BUF [ 30 ]、CNT。
        もし(x < 0 この - > 演算子 <<(' - ')、X = - X。
        もし(Xの== 0 この - > 演算子 <<(' 0 ' )。
        (CNT = 0; バツ; X / = 10 
            BUF [ ++ CNTは]のx%= 10 | 48 ;
        一方、(CNT)
             この - > 演算子 <<((CHAR)cnt-- BUF ])。
        返す * これを
    } 
    インラインioss演算子 <<(長い 長いX)
    { 
        静的 INT BUF [ 30 ]、CNT。
        もし(x < 0 この - > 演算子 <<('-  ')、X = - X。
        もし(Xの== 0 この - > 演算子 <<(' 0 ' )。
        ため(CNT = 0 ; X、X / = 10 
            BUF [ ++ CNTは]のx%= 10 | 48 ;
        一方、(CNT)
             この - > 演算子 <<((CHAR)cnt-- BUF ])。
        返す * これを
    }
    ioss()
    { 
        FB- > sputn(OBUF、OH -OBUF); 
    } 
} I。

 

用途:IO >> X >> Y;へ

おすすめ

転載: www.cnblogs.com/FrankChen831X/p/11261146.html