读入优化

scanf比cin快

但有比scanf更快的

当你cin这样的时候

就要改用scanf

要更快

快读

#include<iostream>
using namespace std;
void read(int &x){
    char s=getchar();int f=1;x=0;
    while('0'>s||s>'9'){if(s=='-')f=-1;s=getchar();}
    while('0'<=s&&s<='9'){x=x*10+s-'0';s=getchar();}
    x*=f;
}
int main()
{
    int a;
    read(a);
    cout<<a;
}

6.17

玄学优化

比getchar还快的fread

读入只能是文件

#include<iostream>
#include<cstdio>
char buf[1000001],*p1=buf,*p2=buf;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1000000,stdin),p1==p2)?EOF:*p1++)
inline int read() {
    char c=getchar();int x=0,f=1;
    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;
}
int main()
{
    freopen("a.txt","r",stdin);
    int a;
    a=read();
    std::cout<<a;
    return 0;
}
View Code

注意事项

切记:不要与scanf()混用!因为(文件流的一些内容可能已经被加载到缓存空间里了 )
不过在第一次使用fread()之前还是可以scanf()的

7.3

又看到一个不知道算不算优化的地方

n=n*10+s-'0'

n=(n<<3)+(n<<1)+s-48;

 

全部评论

相关推荐

重生2012之我是java程序员:换个稍微正式点的照片吧
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务