将函数作为参数传递/以及计算函数运行时间的函数的实现
来源:互联网 发布:数据挖掘的概念 编辑:程序博客网 时间:2024/05/22 15:50
需要写一个九三函数运行时间的函数,那么就需要把函数作为参数
查了一下把函数作为参数的方法
把函数作为参数传递,常用的方法之一是用typedef定义一个函数指针。
#include<iostream>using namespace std;typedef int (*pf)(int,int); //此种方式最容易理解,定义了一个函数指针类型;函数名就是指针。int f(pf p,int a,int b){ return p(a,b);}int add(int a,int b){ return a+b;}int main(){ cout<<f(add,1,2)<<endl;//3}
还可以这样:
#include<iostream>using namespace std;typedef int FuncType(int,int); //定义了FuncType这种函数数据类型int f(FuncType p,int a,int b) //新建了FuncType p变量 这里将p前面加*,照常运行。???{return p(a,b);}int add(int a,int b){return a+b;}int main(){cout<<f(add,1,2)<<endl;//3}
还可以这样:
#include<iostream>using namespace std;int f(int add(int,int),int a,int b) //与第二种方式,不同,直接使用实例{ return add(a,b);}int add(int a,int b){ return a+b;}int main(){ cout<<f(add,1,2)<<endl;//3}
注:前文中提到的关于typedef的用法可参照博文:http://blog.csdn.net/wangqiulin123456/article/details/8284939
或者百度百科 貌似讲的更加清楚:https://baike.baidu.com/item/typedef/9558154?fr=aladdin
于是可得计算比较两个函数运行时间的函数
#include<cstdio>#include<ctime>#include<cmath>#define MAX_N 10#define k 1e7#include<iostream>using namespace std;typedef double funcType(int,double*,double);double a[MAX_N];double f1(int n,double*a,double x);//慢double f2(int n,double*a,double x);//快double time(funcType fun);int main(){ for(int i=0;i<MAX_N;++i) a[i]=(double)i; cout<<"慢:"<<time(f1)<<endl; cout<<"快:"<<time(f2)<<endl; return 0;}double time(funcType fun){ clock_t start,stop; double duration; start=clock(); for(int i=0;i<k;++i)//这里注意可以多运行几次来累计时间 不要把MAX_N调得太大 否则会发生数据溢出 fun(MAX_N,a,1.1); stop=clock(); duration=stop-start; return duration;}double f1(int n,double*a,double x){ double p=0.0; for(int i=0;i<n;++i) p+=(a[i]*pow(x,i)); return p;}double f2(int n,double*a,double x){ double p=a[n-1]; for(int i=n-1;i>0;--i) p=a[i-1]+p*x; return p;}
阅读全文
0 0
- 将函数作为参数传递/以及计算函数运行时间的函数的实现
- 函数作为参数的传递
- 如何将二维数组作为函数的参数传递
- 如何将二维数组作为函数的参数传递
- 如何将二维数组作为函数的参数传递
- 如何将二维数组作为函数的参数传递
- 如何将二维数组作为函数的参数传递
- 如何将二维数组作为函数的参数传递
- 转:如何将二维数组作为函数的参数传递
- 如何将二维数组作为函数的参数传递
- 如何将二维数组作为函数的参数传递
- 如何将二维数组作为函数的参数传递
- 如何将二维数组作为函数的参数传递
- 如何将二维数组作为函数的参数传递
- 如何将二维数组作为函数的参数传递
- 如何将二维数组作为函数的参数传递
- 如何将二维数组作为函数的参数传递
- 如何将二维数组作为函数的参数传递
- ADF panelheader属性介绍
- Java面向对象重点总结
- c++多继承菱形继承
- Ubuntu 16.04 搭建SVN服务器
- 内部类
- 将函数作为参数传递/以及计算函数运行时间的函数的实现
- DevOps实战:Graphite监控上手指南
- 求N^N的最右的一位数!!
- IntelliJ IDEA之创建自己的注释模板Live Templates
- 求N^N的最左的一位数
- 关于指针和sizeof学习的一些总结
- Linux(ubuntu13.04版本)下编译源…
- 关于链表的一些问题
- 浅谈百度1T云盘