C++ 我们应该在for循环之前声明我们正在使用的条件吗?
例如,如果我使用数组的长度来确定For循环中的代码运行了多少次,我是否应该在For循环的顶部初始化数组的计数,以便程序不继续计算字符串的长度 打印数组中每个元素的一些简单代码: 不初始化数组的大小C++ 我们应该在for循环之前声明我们正在使用的条件吗?,c++,visual-studio,visual-c++,C++,Visual Studio,Visual C++,例如,如果我使用数组的长度来确定For循环中的代码运行了多少次,我是否应该在For循环的顶部初始化数组的计数,以便程序不继续计算字符串的长度 打印数组中每个元素的一些简单代码: 不初始化数组的大小 int myArray[5] = { 1,2,3,4,5 }; for (int iPos = 0; iPos < size(myArray); ++iPos) cout << myArray[iPos]; intmyarray[5]={1,2,3,4,5}; 对于(in
int myArray[5] = { 1,2,3,4,5 };
for (int iPos = 0; iPos < size(myArray); ++iPos)
cout << myArray[iPos];
intmyarray[5]={1,2,3,4,5};
对于(int-iPos=0;iPos
对于动态数组,理论上调用std::vector::size()
可以多次执行,但是一个好的优化编译器会缓存它,只要不在循环中修改向量
即使没有,也只需要很少的时间来执行(恒定的复杂性)。for(int iPos=0;iPos
将在每次迭代中计算myArray
的大小。
如果myArray
的大小可以在循环体中更改,这可能很重要。所以要小心
如果myArray
的大小在循环中无法更改,则将计算提取到循环之前的const int sizeOfArray=size(myArray)如果编译器本身没有意识到这一点,并且自己将计算从循环中提升出来,那么代码>可能会为您带来一点点性能
一种更简单的方法是只使用循环的范围,因为这些定义只计算一次大小:
for (const auto& element : myArray)
cout << element;
for(常量自动&元素:myArray)
确实不能;即使每次迭代都可能重新计算范围,这似乎总是毫无意义的,尽管进行了优化,但有些人不喜欢在提升部分条件变量时固有的“范围泄漏”;基于范围的修复!“为循环使用一个范围,因为它们被定义为只计算一次大小”-这样的循环根本不计算计数,因为它是使用迭代器而不是索引和计数在内部实现的。开始迭代器和结束迭代器在循环运行之前检索一次。@RemyLebeau-如果我们不是学究的话,这相当于只计算一次大小。@JesperJuhl,只是在一个范围内的for中根本没有计算大小loop@RemyLebeau现在你太迂腐了
for (const auto& element : myArray)
cout << element;