今天刷题时,在oj上输入数据时用scanf时AC,然而用cin就TLE,cin的使用,往往更为方便,但貌似效率比scanf低好多,于是乎测试了一下cin和scanf的效率。
测试代码如下:
#include <iostream>
#include <time.h>
#include <stdio.h>
#define N 10000
using namespace std;
int main()
{
time_t first, second;
int t;
first=time(NULL);
for(int i=0; i<N; i++)
cin >> t;
second=time(NULL);
printf("Time of test1 is: %fseconds\n",difftime(second,first));
first=time(NULL);
for(int i=0; i<N; i++)
scanf("%d",&t);
second=time(NULL);
printf("Time of test2 is: %fseconds\n",difftime(second,first));
return 0;
}
为了使测试准确,两次输入都是用的相同的数据
tool为生成数据的一个小程序~~
首先设定N为10000时,测试了10000个输入数据,输出结果如下:
二者几乎无差别,设定N为100000,测试结果如下:
当数值加到180000时,结果:
当数据为1000000时,结果为:
可见,当输入小规模数据时cin和scanf之间的差距不是很明显,但对于大数据,scanf的优势相当明显。况且这只是纯的读入测试,而且还是在本地,如果在实际比赛中,cin的效率 会更低,因此,在ACM中,尽量使用scanf来读取数据,除非数据量已知且不够大,可用cin。