zoukankan      html  css  js  c++  java
  • 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.

    你当然可以多测试几次,取一个平均值.

     

    希望对你有用.

     

     

  • 相关阅读:
    Python爬虫入门教程 15-100 石家庄政民互动数据爬取
    mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法
    python cx_Oracle 自动重连
    oracle删除日志文件
    oracle删除日志文件
    oracle删除日志文件
    oracle删除日志文件
    git 常用操作总结
    git 常用操作总结
    git 常用操作总结
  • 原文地址:https://www.cnblogs.com/killerlegend/p/3877703.html
Copyright © 2011-2022 走看看