Я программирую симуляцию, которая проходит через вектор. Внутри кода он выполняет операцию, где вычисляет delta x и y из 2 объектов на каждой итерации. Код, над которым я работаю:
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;
}
}
}
Heres класс:
class Creature {
public:
int xpos;
int ypos;
...
};
Другой код идет туда, но не влияет на производительность. Я замечаю, что если я изменил назначение дельт на число или даже операцию вычитания (например, z-z2 или что-то подобное), он улучшает "FPS" программы от ~ 5 до ~ 7/8. Есть ли способ ускорить эту операцию?
Следующее может быть быстрее
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}
, то выполняются задания. EDIT: creatures.size()
перемещается за пределы цикла (благодаря shawn1874)
creatures
?