这是我的代码:
while (vector0.size())
{
for (ii = vector0.begin(); ii != vector0.end(); ii++)
if (table[*ii] > table[*max]) max = ii;
/*
Here I add push_back something to vector and erase something from vector.
*/
}
热门代码是for
循环和if
语句。
如果我在 gcc(以及 clang)中启用 -O2
或 -O3
,它将变得快 10 倍左右。
我想知道这是为什么以及如何发生的。
最佳答案
只有10次?无赖。我期望的最大优化是删除对 operator[]
的范围检查,这反过来又使其可以内联。此外,end
调用也可以被内联(begin
被调用一次,因此无关紧要)。
顺便说一句,只需调用 std::max_element
。
关于c++ - 在 gcc 中使用 O2 时如何将此 vector 优化快 10 倍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22448135/