我们应该在for循环之前声明我们正在使用的条件吗?

时间:2019-07-06 14:34:48

标签: 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];

在for循环之前初始化数组的大小

int myArray[5] = { 1,2,3,4,5 };

int sizeOfArray = size(myArray);
for (int iPos = 0; iPos < sizeOfArray; ++iPos)
    cout << myArray[iPos];

2 个答案:

答案 0 :(得分:4)

for (int iPos = 0; iPos < size(myArray); ++iPos)将在每次迭代中计算myArray的大小。 如果myArray的大小可以在循环的主体中更改,则 可能很重要。所以要小心。

如果myArray的大小在循环中无法更改,则将计算提取为const int sizeOfArray = size(myArray);到循环之前, 可能会为您带来 tiny >如果编译器本身没有意识到这一点,而是自己将计算提升到循环之外,则性能会有所提高。

一种更简单的方法是仅使用范围转换循环,因为这些循环被定义为仅计算一次大小:

for (const auto& element : myArray)
    cout << element;

然后您也不必担心循环外部范围中是否存在sizeOfArray变量。

答案 1 :(得分:2)

sizeof运算符是一个编译时,因此没有问题,因为您使用的是静态数组。

对于动态数组,从理论上讲,调用std::vector::size()可以执行多次,但是只要您不修改循环内的向量,一个好的优化编译器就会对其进行缓存。

即使没有,size()也几乎不需要执行时间(复杂度恒定)。