将自动用于基于范围的循环时会看到性能大幅下降

时间:2019-04-06 18:33:20

标签: c++

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样式索引迭代那么有效?

0 个答案:

没有答案