版权声明:本文为CSDN博主「高斯纯牛奶」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012966194/article/details/51245180
昨天在OJ上看到一个很水的题,题意就是两个递增序列,输出合并后新序列的中值。当时也闲来无事,于是决定动手写写。刚开始也没怎么在意,认为该题随便都能AC。可提交的结果却TLE了,当时就郁闷了,这算法不可能会有问题啊,不就是一个简单的归并而已,我写的再搓也不可能会TLE啊(小小地自恋一下,哈哈)。我坚信算法肯定是没问题的,那问题究竟出在哪儿了呢?很快便锁定问题的症结在于输入输出,其实刚开始并不确定,虽然很早以前就知道cin,cout比scanf,printf要慢,可一直没在意,认为即使有差别也不会太大吧,但这次“血淋淋”的事实就是cin,cout就TLC,scanf,printf就AC了。于是,一个问题“cin,cout与scanf,printf速度上的差别到底有多大”便出现在脑海中。晚上跑步的时候,将该问题告诉了霏哥,霏哥测试了cin与scanf,但结果却大大出乎了我们的预料,cin竟然比scanf快!怎么回事?这不可能啊,难道霏哥的方法不对,这也不大可能啊(我可是绝对相信霏哥的哦,哈哈)。
带着诸多疑问,我决定自己亲自测测。于是编写了如下代码:
(1)随机生成1000000个数,并将它们写到文件data中
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
const int NUM = 1000000;
int main()
{
ofstream file("data");
for(int i = 0 ; i < NUM ; i++)
{
file<<rand()<<' ';
if((i+1)%20 == 0)
file<<endl;
}
return 0;
}
(2)测试cin读取这1000000个数所用的时间
#include <iostream>
#include <ctime>
#include <cstdio>
using namespace std;
const int NUM = 1000000;
int main()