假设您想在C ++中创建for循环,但除了确定的条件外,您还知道何时或循环应该停止。注意,这种条件不一定必须是硬编码的,循环也不应该始终具有这样的确定值。这只是一个例子,可能对随机循环有用,或者在运行时确定其内容。让我们保持这个简单的例子,并专注于一个可以应用于编程中任何此类相关任务的解决方案。
我想比较这两种解决方案。第一个使用break语句,第二个使用多个或组合条件。在效率或可靠性方面,哪一种是完成任务的“最佳”或“正确”方式。哪一个不容易出错?可以自由地提出另一种解决方案。
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] << “ “;
}
答案 0 :(得分:3)
首先,循环行为有所不同 - 第一个仍然打印数字7
而另一个不打印。
如果您交换了行,它对编译器没有什么影响,两个解决方案都将在几乎相同的本机代码中编译。
关于可读性(并且容易出错):这取决于这样一个简单的规则,它可能更好,更具可读性,使其成为条件的一部分。但是当它变得更复杂时,可能值得引入一些临时变量,然后break
变体更容易阅读。对于更复杂的算法来说,在循环中使用break
通常是很常见的,通常甚至是在break
内部的无限循环。
答案 1 :(得分:2)
正如其他人也注意到的那样,这两种方法并不相同,因为一种产生的输出多于另一种。但是,我想这只是一个错字,你可以通过运行代码明确地确定它。
为了进行比较,第一个更容易概括,如果您需要使用更多的停止条件(它比具有非常长的if更具可读性)或在停止循环之前执行其他操作。例如,您可能想先检查myArray[x] == 7
是否然后在打破循环之前输出一些内容,这可能是这样做的原因。因此,当代码很复杂时,第一种方法会更好。
在性能方面,这些方法非常相似。
答案 2 :(得分:1)
这两个循环不等同。要使第一个循环产生与第二个循环相同的输出(至少,对于您指定的数组的内容),您需要将其更改为
for (int x = 0; x < MAX_SIZE; x++)
{
if (myArray[x] == 7)
{
break;
}
cout << myArray[x] << " ";
}
在实践中,大多数人会发现你的第二种形式更具可读性,因为结束循环有一个明显的条件,而不是两个可以终止循环的独立位置。这就是我通常会使用的那个。
你认为你拥有它的形式相同的事实表明可读性问题正在影响你。所以第二种形式肯定更可取。