读入外挂 std::ios::sync_with_stdio(false);


在此郑重说明,这是水的一篇博客,哈哈哈哈哈。

读入外挂

当遇到坑的题scanf都过不了的时候就用这个,不过这样的情况一般都是代码效率问题。

#include <bits/stdc++.h>
using namespace std;
inline int Scan()  //inline为内联函数,目的是预处理,可减少时间
{
    int res = 0, ch, flag = 0;

    if((ch = getchar()) == '-')             //判断正负
        flag = 1;

    else if(ch >= '0' && ch <= '9')           //得到完整的数
        res = ch - '0';
    while((ch = getchar()) >= '0' && ch <= '9' )
        res = res * 10 + ch - '0';

    return flag ? -res : res;
}
int main()
{
    int n=Scan();
    printf("%d\n",n);
}

当然上面的也可以换成long long 类型的

cin的小技巧

ios::sync_with_stdio(false);
可以将cin和scanf的效率相匹敌。
详情说明:
scanf在Linux平台上测试结果为2.01秒

const int MAXN = 10000000;  
int numbers[MAXN];  
void scanf_read()  
{  
    freopen("data.txt","r",stdin);  
    for (int i=0;i<MAXN;i++)  
        scanf("%d",&numbers[i]);  

cinLinux平台上测试结果为6.38秒

const int MAXN = 10000000;  

int numbers[MAXN];  

void cin_read()  
{  
    freopen("data.txt","r",stdin);  
    for (int i=0;i<MAXN;i++)  
        std::cin >> numbers[i];  
}  

cin慢是有原因的,其实默认的时候,cin与stdin总是保持同步的,也就是说这两种方法可以混用,而不必担心文件指针混乱,同时cout和stdout也一样,两者混用不会输出顺序错乱。正因为这个兼容性的特性,导致cin有许多额外的开销,如何禁用这个特性呢?只需一个语句std::ios::sync_with_stdio(false);,这样就可以取消cin于stdin的同步了。

const int MAXN = 10000000;  

int numbers[MAXN];  

void cin_read_nosync()  
{  
    freopen("data.txt","r",stdin);  
    std::ios::sync_with_stdio(false);  
    for (int i=0;i<MAXN;i++)  
        std::cin >> numbers[i];  
}  

取消同步后效率究竟如何?经测试运行时间锐减到了2.05秒,与scanf效率相差无几了!有了这个以后可以放心使用cin和cout了。

  • 10
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值