在我正在处理的程序中,我有 3 元素数组,我将其用作所有意图和目的的数学向量。
在编写代码的过程中,我很想Vector
用简单的算术重载 ( +, -, * /
) 来创建自己的类,这样我就可以简化如下语句:
// old:
for (int i = 0; i < 3; i++)
r[i] = r1[i] - r2[i];
// new:
r = r1 - r2;
在生成的代码中应该或多或少相同。但是当涉及到更复杂的事情时,这真的会严重影响我的表现吗?我的代码中的一个例子是:
手写版本:
for (int j = 0; j < 3; j++)
{
p.vel[j] = p.oldVel[j] + (p.oldAcc[j] + p.acc[j]) * dt2 + (p.oldJerk[j] - p.jerk[j]) * dt12;
p.pos[j] = p.oldPos[j] + (p.oldVel[j] + p.vel[j]) * dt2 + (p.oldAcc[j] - p.acc[j]) * dt12;
}
使用Vector
带有运算符重载的类:
p.vel = p.oldVel + (p.oldAcc + p.acc) * dt2 + (p.oldJerk - p.jerk) * dt12;
p.pos = p.oldPos + (p.oldVel + p.vel) * dt2 + (p.oldAcc - p.acc) * dt12;
我正在尝试优化我的代码以提高速度,因为这种代码在内部循环内运行。对这些事情使用重载的运算符会影响性能吗?我正在对一个由 n 个相互引力体组成的系统进行一些数值积分。这些向量操作非常常见,因此快速运行非常重要。
任何见解都会受到赞赏,我不知道的任何成语或技巧也是如此。