Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我们应该在for循环之前声明我们正在使用的条件吗?_C++_Visual Studio_Visual C++ - Fatal编程技术网

C++ 我们应该在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

例如,如果我使用数组的长度来确定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};
对于(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;