C/C++注册动态对象到Lu系统并进行运算符重载(三)

2014-11-24 07:38:58 · 作者: · 浏览: 3

Vector x = -0., y = 2., z = 3. time= 531 ms.

本例用Lu脚本内置的静态三维向量vcctor实现,代码为(用OpenLu演示):

main(:a,b,i,t0)= t0=clock(), a=1$2$3, b=1$0$0, i=0, while{++i<=1000000, a=a*b}, o[a, time= ,clock()-t0, ms. ];

结果为:

{(-0.)$(2.)$(3.)} time= 235 ms.

本例的C++实现为:

#include 
  
   
#include 
   
     using namespace std; class Vector { public: double x; double y; double z; Vector(double a=0.0, double b=0.0, double c=0.0) { x=a; y=b; z=c; } }; Vector operator *(Vector &a, Vector &b) { return Vector(a.y*b.z - a.z*b.y, a.z*b.x - a.x*b.z, a.x*b.y - a.y*b.x); } void main(void) { Vector a,b; int i; clock_t start, end; start = clock(); a.x=1.0; a.y=2.0; a.z=3.0; b.x=1.0; b.y=0.0; b.z=0.0; for(i=0;i<1000000;i++) { a=a*b; } end = clock(); cout << a.x << << a.y << << a.z << time= << end - start << ms. << endl; }
   
  


结果为:

-0 2 3 time= 16 ms.

考虑到运算符重载时有新对象生成(例如a*b将生成一个新对象),参考以下C++程序:

#include 
  
   
#include 
   
     using namespace std; class Vector { public: double x; double y; double z; Vector(double a=0.0, double b=0.0, double c=0.0) { x=a; y=b; z=c; } }; Vector operator *(Vector &a, Vector &b) { return Vector(a.y*b.z - a.z*b.y, a.z*b.x - a.x*b.z, a.x*b.y - a.y*b.x); } void main(void) { Vector *pv; int i; clock_t start, end; start = clock(); for(i=0;i<1000000;i++) { pv = new Vector; delete pv; } end = clock(); cout << time= << clock() - start << ms. << endl; }
   
  


结果为:

time= 312 ms.

看来,C++对运算符重载也是有优化的。

6 其他

你可能注意到了,我的联系方式就在下面,如有不明之处或有什么建议,可随时与我进行联系。


版权所有 Lu程序设计 2002-2013,保留所有权利
E-mail: forcal@sina.com QQ:630715621
最近更新: 2014年01月05日