我现在正在学习 c++ 课程,我知道 for 循环会像这样工作,但我想知道它是“正常”还是“正确”
for (int i = 0; getline(cin, input); i++)
这应该是
int i = 0;
while (getline(cin, input))
i++;
我只是想知道,因为我知道 for 循环应该是一个计数器循环,但这个循环的条件与 i 控制的次数无关。
是的,for 循环的规则非常简单。只要你符合规则,语法可以是任何你想要的。
在两者中,只需选择您认为最易读的一个。
严格来说,没有“正确”的方式来编写for
循环:可以将三个部分的任意组合留空(实际上,K&R 建议将三个部分都留空以实现“永远”循环),并且没有硬性具有停止条件的要求取决于循环计数器。
for
循环优于循环的一个优点while
是您可以continue
在体内自由使用,而不必担心忘记增加计数器。这可能有助于具有大量嵌入式continue
语句的循环的可读性。
很好,但就风格而言,我更喜欢while
循环。
for 循环一般用于有界迭代,在这种情况下你可以提前知道迭代的次数,而 while 循环用于更一般的情况。
两者的工作方式相同。然而,这不仅仅关乎他们做了什么,还关乎如何让“人类”更容易理解代码。
您可以将您的源代码视为详细的文档,讨论如何执行特定任务。实际上如此详细,以至于即使是编译器,即愚蠢的机器,也可以理解它。换句话说,你为其他人编写代码,编译成机器代码是一个令人愉快的副作用。
考虑到这一点,以令人惊讶的方式使用句法结构并不是最好的主意。
他们都工作。
声明是大多数人会写的while
方式,而且很容易理解。该for
声明略短一些,但大多数人不得不看两次才能理解它在做什么。
虽然我通常不会认为for
循环仅限于具有预先指定边界的计数循环,但我通常会认为它是increment
循环的一部分直接参与循环完成的循环。
举个例子,我认为遍历一个链表是完全合理的,比如:
for (ptr = list_head; ptr != NULL; ptr = ptr->next)
process(ptr->data);