cin与scanf的读入速度比较(1e7与1e6的速度规模测试)

本文通过实验对比了C++中cin和scanf在处理大规模数据时的读入速度,发现在1e7和1e6数据规模下,scanf通常比cin更快。在特定环境下,如Dev-C++,禁用cin的同步可以提高cin的读取速度,但在VS2017中,cin的性能表现与scanf接近。同时,文章指出在某些情况下,包含iostream会影响scanf的性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在做一些读入数据规模非常大的题目时,可能会遇到由于使用cin而导致TLE的问题。在这里我们就简单对比一下cinscanf在速度上到底是由什么样的差别。
其实这个问题也有不少人写,但是感觉测试的不算全面。

配置

I5-8250U + 8G + Intel辣鸡SSD
普通的轻薄本配置。

先说结论

使用Dev-C++以下时间已取平均值。

  • 1e7的数据规模
    1. scanf读入需要时间:1.1s左右
    2. cin读入需要时间:7.0s左右
    3. std::ios::sync_with_stdio(false); 禁用同步:1.5s左右
  • 1e6的数据规模
    1. scanf读入需要时间:0.12s左右
    2. cin读入需要时间:0.7s左右
    3. std::ios::sync_with_stdio(false); 禁用同步:0.16s左右

我的疑惑…

文末会附上代码,大家可以自己跑跑试试。
在Dev-C++中比VS2017要慢,这个没什么问题。
但是在VS2017中,cin真的很快…不管是启用同步还是禁用同步,cin都可以在1e7的读入上只花1.2s左右,而且scanf在包含iostream的情况下很慢…
而且在Dev-C++中,同时包含iostream和stdio或者只包含iostream都会让scanf的速度很慢。
上边的问题我真的不知道为什么,希望有明白的朋友在评论区讨论一下,谢谢。

代码

生成随机数据:

#include <iostream>
#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值