C++ 停止 for 循环的"best"方法是什么?

C++ What is the "best" way to stop a for loop?

本文关键字:best 方法 是什么 停止 for 循环 C++      更新时间:2023-10-16

假设您想在c++中创建一个for循环,但是除了确定的条件之外,您还知道循环何时或是否应该停止。注意,这样的条件不一定要硬编码,循环也不应该一直具有这样的决定值。这只是一个示例,可能对随机循环或在运行时确定内容的循环有用。让我们保持这个示例的简单性,并将重点放在一个可以应用于编程中任何此类相关任务的解决方案上。

我想比较这两种解决方案。第一个使用break语句,第二个使用多个或组合条件。就效率或可靠性而言,哪一种是完成任务的"最佳"或"正确"方式。哪一个更不容易出现bug ?我可以提出另一个解决办法。

const int MAX_SIZE = 10;
int myArray[MAX_SIZE] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// two ways to stop a loop
for (int x = 0; x <  MAX_SIZE; x++) {
   if (myArray[x] == 7) {
      break;
   }
   cout << myArray[x] << “ “; // fixed
}
for (int x = 0; (x < MAX_SIZE) && (myArray[x] != 7); x++) {
   cout << myArray[x] << “ “;
}

首先,循环的行为略有不同-第一个仍然打印数字7,而另一个则不。

如果你交换了行,这对编译器来说并没有什么区别,两种解决方案将在几乎相同的本机代码中编译。

关于可读性(以及容易出错):这取决于,对于如此简单的规则,将其作为条件的一部分可能会更好,更具可读性。但是,当它变得更复杂时,可能值得引入一些临时变量,然后break变体更容易阅读。对于更复杂的算法来说,在循环中使用break是很常见的,甚至是在无限循环中使用break

其他人也注意到,这两个方法并不等效,因为一个方法产生的输出多于另一个方法。然而,我猜这只是一个打字错误,你可以通过运行代码来明确地识别它。

出于比较的目的,如果需要使用更多的停止条件(这将比使用一个很长的if更具可读性)或在停止循环之前做其他事情,则第一个更容易推广。例如,您可能希望首先检查myArray[x] == 7,然后在中断循环之前输出一些东西,这可能是这样做的原因。因此,当代码比较复杂时,第一种方法更好。

在性能方面,这些方法非常相似。

这两个循环不相等。要使第一个循环产生与第二个循环相同的输出(至少对于您指定的数组的内容),您需要将其更改为

for (int x = 0; x <  MAX_SIZE; x++)
{
     if (myArray[x] == 7)
     {
        break;
     }
     cout << myArray[x] << " ";
}
在实践中,大多数人会发现第二种形式更具可读性,因为只有一个明显的结束循环的条件,而不是两个单独的可以终止循环的地方。这是我通常使用的。

事实上,你认为你的形式是等效的,这表明可读性问题正在影响你。所以第二种形式肯定更可取