访问对象的变量减慢程序(C ++)

时间:2014-01-04 03:40:43

标签: c++ class loops optimization vector

我正在编程一个循环遍历向量的模拟。在代码中,它执行一个操作,每次迭代计算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。有没有办法加快这项行动?

1 个答案:

答案 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