我已经读过一个地方,当你迭代某种数组/序列/列表/你调用它时,你应该使用一个for
循环,当你的循环需要停在一定时,我应该使用一个while循环条件。
那么,如果我有这样的东西怎么办
int len = 0;
for(; s[len] != '\n'; ++len) {
// some processing
if (someCondition) {
return len;
}
}
// if done iterating, return len
return len;
在此上下文中使用for
循环是否可以,或者while
循环是否更可取?
答案 0 :(得分:5)
我可能会这样写:
int len;
for (len = 0; s[len] != '\n'; ++len) {
...
}
return len;
因为那时我在for
语句中说了我感兴趣的范围(索引0直到第一个换行符)。
我通常根据代码的样子在for
和while
之间进行选择,而不是在毛发分裂语义论证中的位置,“某种范围”之间的区别是什么vs“从现在开始直到某些条件为假”。我不认为用for
来玩这个问题是个问题。声明的第三部分是“特别可见的”,因为while
循环末尾的增量不是,并且我认为这足以证明使用它有一个小的扭曲,比如空的第一部分
答案 1 :(得分:2)
for
循环没问题。你在循环控制的地方有增量++len
,我认为这是优选的。你不要忘记它在循环体的末端。使用continue
时,它甚至可以正常工作。
答案 2 :(得分:2)
好吧,for循环是唯一一个接受这种语法的循环,所以我会说你应该使用它。除此之外......它实际上并不是最重要的。做易读的事。
答案 3 :(得分:2)
根据您引用的代码,我使用for
循环,但我会将初始化放在 for
语句中作为赋值:
int len; // <== Not here
for (len = 0; s[len] != '\n'; ++len) { // <== Here
// some processing
if (someCondition) {
return len;
}
}
正是 for
结构的用途:初始化,测试和增量。
答案 4 :(得分:1)
真的没关系。它们在效率方面是等同的。您可以执行以下任一操作:
for(; s[len] != '\n'; len++) { ... }
while(s[len] != '\n') { ... len++; }
在这种情况下,for
循环可能更容易阅读,while
可能更聪明一些,但它们在功能上确实相同。
编辑:是的,for
直到第一个循环之后才会递增计数器。修正了它。
答案 5 :(得分:1)
我会使用While并将len
增量放在条件验证s[++len] != '\n'
中:D
但我想这真的是你更喜欢的味道:)
答案 6 :(得分:1)
就个人而言,我会这样做:
int len = 0;
for (; s[len] != '\n'; ++len) {
// some processing
if (someCondition) {
break;
}
}
// if done iterating, return len
return len;
但实际上,这完全取决于可读性,因为for
和while
循环之间没有真正的语义差异。使用您认为最能传达代码含义的任何格式。在上面的例子中,我选择for
因为len
循环变量,如果不存在,我会选择while
。
答案 7 :(得分:1)
您正在迭代,for
循环更紧凑。无论如何,你可以在任何一种情况下实现相同的目的,但为此我更喜欢使用for
,因为你在开始时拥有所有循环驱动程序(条件,计数器增加)。
int len = 0;
while (s[len] != '\n')
{
// do stuff
if (something) return len;
++len;
}
return len;
VS
int len;
for (len = 0; s[len] != '\n'; ++len)
{
// do stuff
if (something) return len;
}
return len;
答案 8 :(得分:1)
这是一个品味问题。两者都是等价的。
但是多年以来我一直都喜欢while循环for for循环。当线条很短时我更喜欢,并且for有倾向于在同一行中放置3个不同的步骤。
int i=0;
while(s[i] != '\n')
{
// some processing
if (someCondition)
{
return i;
}
++i;
}
但正如我所说,这是一个品味问题。
答案 9 :(得分:1)
foreach怎么样!
int len = 0;
for each (char& c : s) {
// some processing
if (someCondition || c=='\n') break;
len++;
}
// if done iterating, return len
return len;
答案 10 :(得分:1)
我发现大多数帖子都在使用for
。
这篇文章将为您提供想法,以防您想要while
。
#include <stdio.h>
main ()
{
int counter=0;
while(somecondition) {
if (s[counter]!='\n')
{
//some processing
}
++counter;
}
}
return len;