转载地址:http://blog.csdn.net/wuxuguang123/article/details/8130081

一 个程序的功能通常有很多种方法来实现,怎么样的程序才算得上最优呢?举个例子,如果实现同一个功能的两个程序,一个一点按钮就给出运行结果,而另一个则需 要漫长的时间去等待,就像安装WINDOWS XP一样(呵呵,太夸张了吧),你会去使用哪个程序呢?毋庸置疑,最优程序的第一条法则就是:程序的运行速度要快。

 
 那么,既然一个程序能用多种方法来实现,我又如何知道哪种方法是最优的呢?有些程序是显而易见的,你把它运行一下,一个程序要3秒,一个要1秒,你当然
能感觉出来。如果都在一秒之内呢,你又可以看申请的内存空间的多少,运算的数据大小,运算过程的简单复杂,有时也能分辨出哪个程序最好,可是有的时候,却
不是那么容易看出来,比如它比另一个程序少定义一个变量,可是它又比那另一个程序多用几个除法,那么你就如何比较它们的运行速度呢?办法只有一个——计
时!

  C++中的计时函数是clock(),而与其相关的数据类型是clock_t(头文件是time.h)。函数定义原型为:clock_t
clock(void);

  这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock
tick)数,在MSDN中称之为挂钟时间(wal-clock)。

  其中clock_t是用来保存时间的数据类型,在time.h文件中,我们可以找到对它的定义:
   #ifndef _CLOCK_T_DEFINED
   typedef long clock_t;
   #define _CLOCK_T_DEFINED
   #endif
  很明显,clock_t是一个长整形数。另外在time.h文件中,还定义了一个常量CLOCKS_PER_SEC,它用来表示一秒钟会有多少个时钟计时单元,因此,我们就可以使用公式clock()/CLOCKS_PER_SEC来计算一个进程自身的运行时间。

  下面就上面的知识给大家举个例子帮助大家理解。

#include<iostream.h>
#include<time.h>
void main()
{
   clock_t start,finish;
   double totaltime;
   start=clock();

……                     //把你的程序代码插入到这里面

finish=clock();
   totaltime=(double)(finish-start)/CLOCKS_PER_SEC;
   cout<<"\n此程序的运行时间为"<<totaltime<<"秒!"<<endl;
}

  如此这般,我们就可以得出程序的运行时间然后进行比较,很简单,很方便吧。
  可能有人要问,如果两个程序的运行时间都少于一秒,我们根本就感觉不到,有比较的意义么?回答是有!因为我们写的可能只是一个很大的程序中的一个功能
函数,而在主程序中可能会反复调用这个功能函数,如果一个功能函数比另一个实现同样一个功能函数运行快0.01秒,把这两个函数在主函数中分别调用
1000次,效果是显而易见的。
  好了,这是我的一些小经验,希望能给我的LP和其他的朋友们提供一点小小的帮助。

自己应用的模板代码:

#include <stdio.h>
#include <time.h> int f[100000001]; int main()
{
clock_t s, e;
s = clock();
//........code...... e = clock(); printf("%.6lf\n", (double)(e-s)/(double)CLOCKS_PER_SEC );
return 0;
}

最新文章

  1. .NET中的DES对称加密
  2. python中多进程(multiprocessing)
  3. java 常用concurrent类
  4. String.Format格式说明(转)
  5. Servlet小知识点
  6. windows下将隐藏文件通过命令行改变为普通的显示文件
  7. spring boot学习资源
  8. Beta冲刺第一天
  9. 获取元素属性get_attribute
  10. 支持MPI的hdf5库的编译
  11. HDU 6319 Problem A. Ascending Rating(单调队列)
  12. Java 四种引用介绍及使用场景
  13. kafka集群partition分布原理分析
  14. 执行SDK的aapt报错./aapt: /lib64/libc.so.6: version `GLIBC_2.14&#39; not found (required by ./aapt)
  15. RNN文章总结
  16. Java 初相识
  17. TreeView 高速单击时不运行AfterCheck时间
  18. HDU 3605 Escape(状态压缩+最大流)
  19. ArrayAdapter的用法
  20. Hbase(2)-HBase简介

热门文章

  1. BZOJ3751 NOIP2014 解方程(Hash)
  2. redis-bitmap 命令使用的一些帖子
  3. Spring Boot中使用AOP记录请求日志
  4. javascript --- 构造器借用
  5. mysql delete auto_increment列时的注意问题
  6. Solidworks安装完成提示failed to load slderresu.dll怎么办
  7. 使用 rman duplicate from active database 搭建dataguard 手记--系列二
  8. Ubuntu下安装libsvm
  9. linux 启动ftp服务,sftp服务
  10. ZYThumbnailTableView---堪比一个小型阅读App