给出一个整数向量,我看到我的教授在写:
for (int i=0;i<vect.size();++i)
{
}
我认为他的代码效率不高,可以用下面的代码代替,对吗?
int vect_size=vect.size();
for (int i=0;i<vect_size;++i)
{
}
您可以这样做:
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的这篇演讲。