int x = 0;
int i = 0, s = projectiles->size();
for (i; i < s; ++i)
{
++x;
(*projectiles)[i].UpdatePosition();
(*projectiles)[i].UpdateRenderPriority();
if(rendering.ShouldRender(&(*projectiles)[i].rect)) { rendering.renderQueue.push(&(*projectiles)[i]); }
}
std::cout << x << std::endl;
这是我正在编写的此循环的版本A,
int x = 0;
for (auto &elem : *projectiles)
{
++x;
elem.UpdatePosition();
elem.UpdateRenderPriority();
if(rendering.ShouldRender(&elem.rect)) { rendering.renderQueue.push(&elem); }
}
std::cout << x << std::endl;
这是版本b。
projectiles是指向包含我已编写的称为“ Projectile”的类的向量的指针。
我不知道为什么,但是使用索引的版本比自动版本快20%(滞后之前62k个对象对48k)。我的印象是,自动循环是c ++ 11之前的std :: iterator版本的简写,所以我不知道为什么会看到如此大的差异。自动循环是否在每个循环中创建新的射弹或进行分配或其他操作?还是在向量上进行c样式索引迭代那么有效?