• 快读&快写模板【附O2优化】


    快读&快写模板

    快读快写,顾名思义,就是提升输入和输出的速度。在这里简单介绍一下几种输入输出的优劣。

    C++ cin/cout 输入输出:优点是读入的时候不用管数据类型,也就是说不用背scanf/printf的%d、%c、%lld等繁琐的东西,但是缺点就是比scanf/printf慢一些。

    C scanf/printf 输入输出:与C++对比,比cin/cout快一些,但使用方法细节比较多,容易出锅。

    快读/快写:只能处理整数读入/输出,但是要比标准输入输出函数都快得多。

    • 一般来讲,快读快写在针对数据量不是很大的输入输出的时候显得比较无力,但如果是多组数据或者输入量较多,就可以显著提升效率。

    • 开不开inline差不多。

    • 还有一种更快的fread()函数型快读,比一般的快读都要快,但是模板不太好理解,所以不加介绍。

    快读模板及实现原理

    快读是在字符读入的基础上进行效率优化的,其实现原理也很简单,看代码就可以理解了。x变量记录大小,f变量判断正负。

    模板代码:

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

    (注:本人无压行习惯,所以造成行数比较多,实际使用的时候可以把它压缩,比较好调)

    优化快读模板

    机房大佬说这是快读的另一套模板,但是本蒟蒻以为这是同一种模板,只不过这个模板在读入速度上进行了优化而已。在原来的模板字符读入的基础上进行了提速。嗖嗖快。

    代码:

    char *p1,*p2,buf[100000];
    #define nc() (p1==p2 && (p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++)
    int read()
    {
        int x=0,f=1;
        char ch=nc();
        while(ch<'0'||ch>'9')
        {
            if(ch=='-')
                f=-1;
            ch=nc();
        }
        while(ch>='0'&&ch<='9')
            x=x*10+ch-'0',ch=nc();
       	return x*f;
    }
    

    快写模板及实现原理

    快写其实也是在字符输出(普遍认为字符输出比标准输出流快)的基础上进行按位分解,递归输出的。其基本原理还是先判正负再分解输出的。

    模板代码:

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

    附:O2优化

    我们不用管O2优化的原理,只需要记住这个优化能使得程序的效率大大提高(我Jio得到底能提多少还是得看RP)。

    手动打开O2开关:

    #pragma GCC optimize(2)
    
  • 相关阅读:
    SqlLite的使用
    asp.net批量上传图片带进度条显示
    对于GridView控件的RowDataBount事件的错误理解
    关于SQL中时间对比
    关于使用触发器时使用@@identity的问题
    关于Treeview控件如何给每个节点加js脚本的方法
    /etc/init.d/functions详解
    如何解决安装DreamWeaver8 时候提示“无法将数值写入键/SOFTWARE/classes/.shtml”
    [请教]关于超大数据量网站的数据搜索和分页的实现方法
    svchost.exe[900]中发生未处理的win32异常
  • 原文地址:https://www.cnblogs.com/fusiwei/p/11457143.html
Copyright © 2020-2023  润新知