1

在我的程序中,我使用了几个类和大量的函数。我想知道哪一个会更快,或者它们之间在速度方面没有区别。

第一:类功能

class mex{
  public:
    int length,nof_evaluations,nof_fast_evaluations;
    tree T;
    calc_mex(vector<string>,vector<double>);
}; 

这将由

mex m;
vector<string> v1;
vector<double> v2;
m.calc_mex(v1,v2);

2nd:带有类指针的函数

class mex{
  public:
    int length,nof_evaluations,nof_fast_evaluations;
    tree T;
}; 
calc_mex(mex*,vector<string>,vector<double>);

这将由

mex m,*mptr;
mptr=&m;
vector<string> v1;
vector<double> v2;
calc_mex(mptr,v1,v2);

我在我的程序中使用了这两种方式,但更倾向于方式 1,因为它看起来更干净、更有条理。我还在程序的一次运行中调用了这些类型的函数 100K 次。所以我想知道他们中的任何一个是否会在时间上做得更好。

谢谢!

4

3 回答 3

5

Rather than speed the deciding factor should be whether the function logically belongs to the class or not. If yes make it a member. If not make it a free standing function.

BTW each member function is implicitly passed an this pointer so there is not much difference between the two versions. If you are truly concerned about performance. Make a sample program with both versions and profile it in your environment with a large data set.

于 2013-02-06T16:20:07.320 回答
3

我支持 Alok save 给出的答案,我必须重申 Donald Knuth 的声明(他很有名,所以这个声明必须是真的,很明显......):

程序员浪费大量时间来思考或担心程序中非关键部分的速度,而在考虑调试和维护时,这些提高效率的尝试实际上会产生强烈的负面影响。我们应该忘记小的效率,比如大约 97% 的时间:过早优化是万恶之源。然而,我们不应该放弃那关键的 3% 的机会。

我在这个问题上的两分钱:测量一些东西,直到你非常确定你的“优化”将使程序受益。否则,您往往会生成随着时间的推移变得更加不可读和不可维护的代码......

于 2013-02-06T16:27:02.807 回答
1

在 C++ 中,所有成员函数(除非它们是虚函数)都是独立函数,“this”作为第一个参数传入。选择一个而不是另一个,您不会获得任何速度提升,它们都只是函数调用。

于 2013-02-06T17:35:04.150 回答