前言
在做一些读入数据规模非常大的题目时,可能会遇到由于使用cin而导致TLE的问题。在这里我们就简单对比一下cin
和scanf
在速度上到底是由什么样的差别。
其实这个问题也有不少人写,但是感觉测试的不算全面。
配置
I5-8250U + 8G + Intel辣鸡SSD
普通的轻薄本配置。
先说结论
使用Dev-C++以下时间已取平均值。
- 1e7的数据规模
scanf
读入需要时间:1.1s左右cin
读入需要时间:7.0s左右std::ios::sync_with_stdio(false);
禁用同步:1.5s左右
- 1e6的数据规模
scanf
读入需要时间:0.12s左右cin
读入需要时间:0.7s左右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>
#