快读函数read()

8 篇文章 0 订阅
6 篇文章 1 订阅

昨天晚上写了牛客月赛40,之后第一题叫是说“读入的数据较大,选择比较快的读入方式。”

目录

scanf读入

cin读入

Read()函数


scanf读入

cin读入相同数据的时间是scanf的3.5~4倍。一般来说,用sacnf读入是要比cin快很多的,要是题目对于时间限制的比较死,就不要犹豫了,毕竟用cin有一定的风险,还是老老实实用sacnf输入。

cin读入

cin读入是比较慢,但是我们可以加上这样一个语句来加快我们读入的速度,(cout和cin一样都还是比较耗费时间的)

std::ios::sync_with_stdio(false); 
cin.tie(0); //对输入加速
cout.tie(0);//对输出加速

加上这个之后,也是和scanf差不多的。

这里关于scanf和cin的性能比较可以去读一下这个大佬的文章

大佬的文章点这里

Read()函数

快速读入函数;先介绍int 类型地。

也就是cin>>a;和这里的a=read();是等价的意思。

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

while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}                                                                         这一句就是读入一段很长的数,之后要判断他是负数;


while(c>='0'&&c<='9') x=x*10+c-'0',c=getchar();                                                                    这里是把字符串转化为数字,再把x*f作为函数的返回值

当然这里讲的是int 类型的快速读入函数,还有 long long类型的,double 类型,string 类型的;

long long 类型的就是数据范围更加大一些像下面这样就可以了//其实就是改了函数类型

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

string类型的也是类似的,返回类型不一样,返回值也变一下

string StringRead()
{
    string str;
    char ss = getchar(); 
    while (ss == ' ' || ss == '\n' || ss == '\r')
    {
        s = getchar();//遇到这些继续往下读;
    }
    while (s != ' ' && s != '\n' && s != '\r')
    {
        str += s;
        s = getchar();//遇到不是空格,不是换行,不是回车就读入这个字符;
    }
    return str;
}

  • 14
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Andy℡。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值