2016-11-05 492 views
1

假设您想要在C++中创建一个for循环,但除了确定的条件之外,您还知道什么时候该循环或应该停止循环。请注意,这样的条件不一定必须是硬编码的,循环也不应该始终具有这样的确定值。这只是一个例子,可能对随机循环有用,或者在运行时确定内容的内容。让我们保持这个例子的简单,并将重点放在可以应用于编程中的任何此类相关任务的解决方案上。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] << “ “; 
} 
+1

我会选择第二种形式,因为它将条件保留在一个地方,并且实际的循环代码不受干扰。我认为这归结于优先。 – user2296177

+2

似乎你的循环有不同的行为。假设x为0,myArray [0]等于7. – PaulMcKenzie

+0

我的意思是说,在这两种情况下,您每次都进行相同次数的比较。我认为第一个更具可读性,不过因为任何人都可以将标准的'for'循环代码遮住,并将第二个条件看作是特殊的东西。老实说,我认为这只是微不足道的。 –

回答

3

首先,循环的行为看起来不同 - 第一个仍然打印号码7而其他没有。

如果你交换了行,这对编译器来说不会有什么不同,这两种解决方案都会被编译成几乎相同的本地代码。

关于可读性(以及容易出错):这取决于,对于这样一个简单的规则来说,它可能更好,更具可读性,使其成为条件的一部分。但是当它变得更加复杂时,可能需要引入一些临时变量,然后break变体更易于阅读。实际上,在循环内部使用break更复杂的算法是很常见的,通常在内部使用break甚至是无限循环。

1

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

for (int x = 0; x < MAX_SIZE; x++) 
{ 
    if (myArray[x] == 7) 
    { 
     break; 
    } 
    cout << myArray[x] << " "; 
} 

在实践中,大多数人会发现你的第二个形式更具可读性,因为结束循环有一个明显的条件,而不是两个可以终止循环的独立位置。这是我通常会使用的。

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

+0

谢谢。循环的形式就是我的意思。 – Galaxy

2

正如其他人也指出的那样,这两种方法并不等同,因为它们产生的输出比另一种更多。但是,我猜这只是一个错字,你可以通过运行代码来确定。

出于比较的目的,如果您需要使用更多的停止条件(它的可读性比持续时间更长)或者在停止循环之前执行其他操作,则第一个更容易推广。例如,您可能首先检查是否myArray[x] == 7,然后在断开循环之前输出一些内容,也许是这样做的原因。因此,当代码复杂时,第一种方法更好。

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