提问者:小点点

调用Vector.size()的更有效方法


给出一个整数向量,我看到我的教授在写:

for (int i=0;i<vect.size();++i)
{
}

我认为他的代码效率不高,可以用下面的代码代替,对吗?

int vect_size=vect.size();
for (int i=0;i<vect_size;++i)
{
}

共2个答案

匿名用户

您可以这样做:

for (std::size_t i = 0, vect_size = vect.size(); i < vect_size; ++i)
{
}

这样,您就可以限制vect_size的作用域。

匿名用户

不要像这样陷入过早的优化陷阱。 你的编译器完全有能力在需要的情况下优化这些行。

还有一些事情你应该注意。

>

  • 假设vect是一个vector,则std::vector::size()返回一个size_t值,该值是一个无符号类型。 您的编译器可能会警告您比较i; vect.size(),它涉及不同签名的变量。
    如果确实希望i成为int(可能没有理由使其不签名),则可以使用以下方法

    for ( int i = 0, v_size = vect.size(); i < v_size; ++i ) { /* ... */ }
    

    你真的需要i吗? 从C++11开始,您可以编写基于范围的for循环,通常,您可能希望(1)使用标准库提供的算法之一,而不是原始循环。

    1)参见Sean Parent的这篇演讲。