读入读出优化详解

读入读出优化:

  我们都知道C++里有很多读入的方式,有iostream里的cin,和stdio里的scanf,在这两个读入函数中也是有着优劣之分的,cin的速度就远远不如scanf,因为cin在输入时关联了很多东西,拖慢了它的速度,我就先来讲一下如何将cin的速度提上去。

 

cin提速:

  我们在输入前写这么一句话:std::ios::sync_with_stdio(false); 就可以将和cin关联的操作取消,这样就可以给cin提速,提速后的cin大概和scanf差不多。

getchar()优化:

  这是最常用的读入方法了,C++里机器读取字符串的速度比读取数字的速度快上不少,我们可以将个数字分成一个一个数字字符来读入,运用乘法和加法来储存,这样就可以大大加快读入的速度,不要以为计算多了速度就慢了,它的速度大概时scanf的10倍之快。

  我们先定义一个整形变量f=1,读入第一个字符,如果它是‘-’ 则f=-1,否则不变,将这个字符代表的数字的值放入x中,下面while,不断读入数据,对于新读入的数据,x=x*10+字符-‘0’;

  循环条件是读入的这个字符是数字字符,如果不是就跳出,最后不要忘了x=x*f;确定正负,读入完毕。

Code:

void read(int &x) //&x的意思是取地址,如果函数里x的值改变,外面的值一起改变 
{
    int f=1;
    char cz;
    cz=getchar();
    if(cz=='-'){
        f=-1;
        cz=getchar();
    }
    while(cz<='9'&&cz>='0')
    {
        x=x*10+cz-'0';
        cz=getchar();
    }
    x*=f;
}

 

  下面是输出优化,不是很常用,使用递归将这个数输出(不用递归的话数输出来是反的),每次输出的数是n%10,然后n/=10;直接上代码;

Code:

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

  

  文章到此结束,谢谢观看。

posted @ 2019-08-04 20:41  輂鶸  阅读(...)  评论(...编辑  收藏