zoukankan      html  css  js  c++  java
  • 思考题三

    问题

    请你介绍一种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 变长参数

  • 相关阅读:
    SpringCloud学习(三)服务消费者(Feign)(Finchley版本)
    go爬虫系列
    SpringCloud学习(二)服务消费者(rest+ribbon)(Finchley版本)
    SpringCloud学习(一)服务的注册与发现Eureka(Finchley版本)
    JDK源码分析(11) ConcurrentLinkedQueue
    ServiceFabric极简文档-4.1 学习路线图
    ServiceFabric极简文档-4.0 开发环境搭建
    ServiceFabric极简文档-3. 发布脚本
    ServiceFabric极简文档-2 部署环境搭建-配置文件
    ServiceFabric极简文档-1.3删除群集
  • 原文地址:https://www.cnblogs.com/JustinRochester/p/12232709.html
Copyright © 2011-2022 走看看