提高迭代std :: vector的性能的最佳方法是什么?

时间:2014-08-03 22:04:12

标签: c++ for-loop

当我看到迭代矢量的典型方式时......

for (size_t i = 0; i < my_vector.size(); i++)
{
   doSomething(my_vector[i]);
}

......我觉得这样可能会更快......

size_t i = 0, size = my_vector.size();

for (i; i < size; i++)
{
   doSomething(my_vector[i]);
   //I know, the size of the vector must not be changed here
}

...因为size()只会被调用一次而不是每个循环。

也许有人能够清楚地告诉我,谢谢!

P.S。我应该使用std :: vector :: iterator吗?

(sry for bad english)

2 个答案:

答案 0 :(得分:1)

这可能会更快,但由于您正在使用C ++,另一种方法可能是使用迭代器:

// declare it to be some appropriate type of iterator
for (it = my_vector.begin(); it != my_vector.end(); ++it)
    doSomething(*it);

但是,您在这里要小心,您不会无意中在my_vector中构建每个项目的临时副本。

如果你正在使用C ++ 11,另一种选择是使用range-for:

for (const auto &thing : my_vector)
    doSomething(thing);

请注意,使用const&意味着我们避免复制my_vector中的每个项目。

答案 1 :(得分:0)

如果您不想修改元素,可以试试这个:

for (const auto &elem : my_vector)
{
    //
}