加速读取——三式(getchar,std::ios::sync_with_stdio(false)、cin.tie(0))

博客介绍了在C++中如何提高数据输入速度,通过关闭流同步cin与stdio,使用cin.tie(0)和getchar()方法。关闭流同步能显著提升cin的读取效率,但可能与scanf()等造成混乱。同时,getchar()处理char类型变量的速度更快,适合大量数据输入的场景。博主分享这些技巧,旨在帮助解决竞赛编程或处理大数据输入时的效率问题。
摘要由CSDN通过智能技术生成

在一些题目中会出现数据输入很大的情况,如果我们运用不好读取数据工具的话,那么很可能会在读取数据上花费较多的时间,甚至还没读完就超时了。

读取速度
cin < cin(关闭流同步) < scanf < getchar()


cin(关闭流同步)

为什么 cin(关闭流同步) 的读入数据的能力大于 cin (未关闭流同步)?
C++中, cin 和 cout 要默认与 stdio 同步。在 cin、cout 输入输出下,会有进行缓冲同步 stdio ,使 scanf() 与 printf() 能够与 cin、cout 混用,也导致 cin、cout 语句输入输出缓慢。
cin 关闭流的同步,就能够实现使用 cin、cout 输入输出提速的效果。

std::ios::sync_with_stdio(false);

当未关闭流同步时,使用cin读取一百万个整数用了 2.536秒。
当关闭流同步后,使用cin读取一百万个整数仅仅用了 0.439秒。
读取效率得到了显著提高。

//输入data.txt数据
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1000000;
int main()
{
   
	std::ios::sync_with_stdio(false);
    freopen("data.txt","w",stdout);
    for (int i=0;i<MAXN;i++)
        cout << i <<" ";
    return 0;
}
//关闭流同步
//data.txt中有一百万个整数
#include<bits/stdc++.h>
const int MAXN = 10000000;
int numbers[MAXN];
 
i
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值