以下哪项更好,为什么?(特别是c ++)
一个.
int i(0), iMax(vec.length());//vec is a container, say std::vector
for(;i < iMax; ++i)
{
//loop body
}
Run Code Online (Sandbox Code Playgroud)
湾
for( int i(0);i < vec.length(); ++i)
{
//loop body
}
Run Code Online (Sandbox Code Playgroud)
我已经看到了(a)的建议,因为调用了长度函数.这让我很烦.没有任何现代编译器将(b)的优化与(a)类似吗?
And*_*erd 12
示例(b)与示例(a)具有不同的含义,编译器必须在编写时对其进行解释.
如果,(由于某些我无法想到的原因),我编写了代码来执行此操作:
for( int i(0);i < vec.length(); ++i)
{
if(i%4 == 0)
vec.push_back(Widget());
}
Run Code Online (Sandbox Code Playgroud)
我真的不希望编译器优化每次调用vec.length(),因为我会得到不同的结果.
Ass*_*vie 10
我喜欢:
for (int i = 0, e = vec.length(); i != e; ++i)
Run Code Online (Sandbox Code Playgroud)
当然,这也适用于迭代器:
for (vector<int>::const_iterator i = v.begin(), e = v.end(); i != e; ++i)
Run Code Online (Sandbox Code Playgroud)
我喜欢这个,因为它既有效率(end()只调用一次),也相对简洁(只需输入vector<int>::const_iterator一次).
我很惊讶没有人说明显的:
在99.99%的情况下,没关系.
除非你使用的size()是计算是一项昂贵的操作的容器,否则你的程序甚至会慢几纳秒,这是不可思议的.我会说在您分析代码并发现这size()是一个瓶颈之前,坚持使用更具可读性.