思考問題3

2520 ワード

に質問
C/C++言語の文法、標準ライブラリを紹介してください.
の意見を打診
1.inlineキーワード:インライン関数
例:
inline void printbool(bool b){
    if(b) puts("YES
"); else puts("NO
"); }

このキーワードは、コンパイラに提案し、関数のスタックスペースを申請しないことができます.コンパイラが採用されると、以下で対応する関数を使用する場合と同様に、関数を直接コピーします.ある程度、プログラムの実行速度を速めることができます.しかし、コードが膨張する可能性もあり、慎重に使用する必要があります.
2.registerキーワード
例:
int ans=0;
for(register int i=1;i<=100;i++) ans+=i;

このキーワードはコンパイラに提案し,後で申請した変数をレジスタに格納することができる.コンパイラが採用されると、ある程度読み取り速度が速くなります.
3.typedefキーワード
例1:
typedef int i32;
i32 a=0;

例2:
struct Node{
    int L,R,Sum,Lazy;
    Node *Lc,*Rc;
}; 
typedef *Node Tree;
Tree t=0;

例3:
const int MAXN=1024;
typedef int ar[MAXN];
ar phi;

変数名の名前を変更するために使用され、コードの可読性をある程度強化できます.
4.namespaceキーワード:ネームスペース
例:
namespace IO{
    int read(){
        int ans=0;char c=getchar();bool neg=0;
        while(c'9') { if(c=='-') neg=!neg; c=getchar(); }
        while(c>='0'&&c<='9') { ans=ans*10+c-'0'; c=getchar(); }
        if(neg) return -ans;
        else return ans;
    }
}
using namespace IO;
int main(){
    int a=read();
    ......
}
/*
       using namespace IO;

      int a=IO::read();
*/

このキーワードは、変数名または関数名が同じ名前で競合することを回避する新しいネーミングスペースを開きます.
5.time()関数の使い方(ライブラリ内)
time(NULL);
//      time(0)

この操作は1970年1月1日0時0分0秒から現在の秒数を返し、乱数生成器のシードとしてよく使用されます.
6.staticキーワード:静的ローカル変数
例:
long long int rand(){
    static long long int num=rand();
    return num=(num+19260817)*19491001%998244357;
}

この操作でカスタム関数内で申請された変数は、初期値が付与された後、その関数が呼び出されるたびに、対応する変数が前回の関数の実行終了時の値になります.
  • fread関数に基づく読み込み最適化
  • 例:
    inline char gc(){
        static char s[1<<20|1],*p1=s,*p2=s;
        return (p1==p2)&&(p2=(p1=s)+fread(s,1,1<<20,stdin),p1==p2)?EOF:*(p1++);
    }
    inline long long read(){
        register long long ans=0;register char c=gc();register bool neg=0;
        while(c<48||c>57) neg^=!(c^'-'),c=gc();
        while(c>=48&&c<=57) ans=(ans<<3)+(ans<<1)+(c^48),c=gc();
        return neg?-ans:ans;
    }

    fread()関数には4つのパラメータがあります.1つ目はバッファで、格納された配列と簡単に理解できます.2つ目は、読み込みユニットのサイズ、すなわち、読み込みコンテンツの最小単位のサイズである.3つ目は最大読み込み量です.4つ目は、私は何なのか理解していません.どうせ毎回stdinを書いています.最後の戻り値は、実際に読み込まれたサイズです.
  • templateキーワード:
  • args変長パラメータ