思考题三

问题

请你介绍一种C/C++语言的语法、标准库。

看法

1.inline 关键字:内联函数

例子:

inline void printbool(bool b){
    if(b) puts("YES\n");
    else puts("NO\n");
}

该关键字可以向编译器提出建议,取消申请该函数的栈空间。若编译器采纳,将会类似于在下文使用到对应函数时,直接将函数拷贝过去。在一定程度上,可以加快程序运行速度。但也可能导致代码膨胀,需要慎用。

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<'0'||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;
}

该操作在自定义函数内申请的变量,将会在赋初值后,每次调用该函数时,相对应变量为上一次该函数运行结束时的值

  1. 基于 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() 函数有四个参数:第一个是缓冲区,可以简单理解为存储的数组;第二个是读入单元的大小,即读入内容的最小单位的大小;第三个是最大读入量;第四个,我没理解是啥玩意儿,反正每次都是写 stdin ;最后的返回值为实际读入的大小

  1. template 关键字:

  2. args 变长参数

猜你喜欢

转载自www.cnblogs.com/JustinRochester/p/12232709.html