我正在编程一个循环遍历向量的模拟。在代码中,它执行一个操作,每次迭代计算2个对象的delta x和y。我正在处理的代码:
for(unsigned z = 0; z < creatures.size(); z++) {
for(unsigned z2 = 0; z2 < creatures.size(); z2++) {
if(z != z2) {
int delta_x = creatures[z2].xpos - creatures[z].xpos;
int delta_y = creatures[z2].ypos - creatures[z].ypos;
}
}
}
继承班级:
class Creature {
public:
int xpos;
int ypos;
...
};
其他代码在那里,但不会影响性能。我注意到如果我将增量的赋值更改为数字甚至减法操作(例如z-z2或类似的东西),它会将程序的“FPS”从~5改为~7 / 8。有没有办法加快这项行动?
答案 0 :(得分:4)
以下可能会更快
const std::size_t size = creatures.size();
for (unsigned z = 0; z + 1 < size; z++) {
const int zx = creatures[z].xpos;
const int zy = creatures[z].ypos;
for (unsigned z2 = z + 1; z2 < size; z2++) {
const int delta_x = creatures[z2].xpos - zx;
const int delta_y = creatures[z2].ypos - zy;
}
}
creatures[z].xpos
移到循环之外。creatures.size()
移到循环之外。{z, z2}
对与{z2, z}
对称,因此将作业分组。 编辑:creatures.size()
移出循环(感谢 shawn1874 )