对于cin和scanf效率的测试

来源:互联网 发布:私立学校收费软件 编辑:程序博客网 时间:2024/05/16 07:05
由上一题杭电的1425水题,给我的启发是多用scanf,printf。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。cout,cin是基于流的输入与输出,有缓存区,先把结果存到缓存区,然后一次性输入和输出,但是,cout之类有类型检查,不容易错。基于上述原因,在对性能比较苛刻的情况下,还是用scanf,printf比较好。

1 0