C++程序运行时间测定
From:http://www.cnblogs.com/killerlegend/p/3877703.html
Author:KillerLegend
Date:2014.7.30
此处程序的测试时间精确到毫秒级别,第一种方式是在程序中测定,第二种是编写一个专门用于测试程序运行时间的命令行程序.下面分别介绍:
程序中测定
主要用到的头文件有time.h,主要使用的是其中的一个clock函数,例程如下:
1 #include <iostream> 2 3 #include <time.h> 4 5 usingnamespace std; 6 7 int main() 8 9 { 10 11 clock_t start = clock(); 12 13 // Place your codes here... 14 15 clock_t ends = clock(); 16 17 cout <<"Running Time : "<<(double)(ends - start)/ CLOCKS_PER_SEC << endl; 18 19 return0; 20 21 }
程序很简单,输出的结果秒数,如果将结果乘以1000则输出的为毫秒数.
命令行程序测定
首先说一下命令行参数,完整的main函数声明如下:
1 int main (int argc,char*argv[])
其中第一个参数argc代表argument count,也就是参数的个数,应用程序本身也算一个参数,第二个参数argv表示一系列字符串,分别对应于第一个,第二个...参数.第一个参数argv[0]是程序本身的名字,argv[argc]是一个空指针.现在我们就可以自己编写一个简单的计时器程序了,程序如下,名字就叫做timer.cpp:
1 #include <iostream> 2 3 #include <stdlib.h> 4 5 #include <time.h> 6 7 8 9 usingnamespace std; 10 11 int main(int argc,char** argv)//char** argv<==>char* agrv[] 12 13 { 14 15 if(argc!=2) 16 17 { 18 19 cout<<"Usage:timer program_examed_name"<<endl; 20 21 return1; 22 23 } 24 25 26 27 cout<<"Beginning test..."<<endl; 28 29 clock_t begin = clock(); 30 31 system(argv[1]); 32 33 clock_t end = clock(); 34 35 36 37 cout<<"Running time: "<<(double)(end-begin)/CLOCKS_PER_SEC*1000<<"ms"<<endl; 38 39 }
其中的if语句用于判断参数的个数,如果不对,则中断程序.用到的system包含于stdlib.h头文件横纵,因此不要忘记包含这个文件.此命令用于执行我们编译好的程序.下面来具体说一下步骤:
1:首先将timer.cpp编译,生成一个timer.exe可执行程序.
2:我们的程序,假设为main.cpp,如果我们要从外界读取数据并且输出数据,我们需要使用freopen函数(包含在stdio.h中)来让程序执行的时候自动读取输出,看起来就像这样子:
1 #include <cstdio> 2 3 //...other headers 4 5 int main() 6 7 { 8 9 freopen("data.in","r",stdin); 10 11 freopen("data.out","w",stdout); 12 13 //your code... 14 15 return0; 16 17 }
其中,data.in和data.out自己随便起名都可以,保证和原程序在同一个目录下就行.
编译程序完成后, 生成一个main.exe程序,然后将所需要的数据放到data.in中,打开命令行,转到我们的程序所在的位置(包含有main.exe以及timer.exe),然后在命令行中输入:
1 timer main
看起来就像下面这样:
时间是74ms.
你当然可以多测试几次,取一个平均值.
希望对你有用.
作者:KillerLegend
出处:http://www.cnblogs.com/KillerLegend/
分享最新的资源,分享个人所得,欢迎关注我的新浪微博
新浪微博主页:ikey4u
我的个人博客:www.ikey4u.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。