在这种情况下有什么好处 - “for”或“while”

时间:2010-12-10 22:32:19

标签: c++ c

我已经读过一个地方,当你迭代某种数组/序列/列表/你调用它时,你应该使用一个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循环是否更可取?

11 个答案:

答案 0 :(得分:5)

我可能会这样写:

int len;
for (len = 0; s[len] != '\n'; ++len) {
    ...
}
return len;

因为那时我在for语句中说了我感兴趣的范围(索引0直到第一个换行符)。

我通常根据代码的样子在forwhile之间进行选择,而不是在毛发分裂语义论证中的位置,“某种范围”之间的区别是什么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;

但实际上,这完全取决于可读性,因为forwhile循环之间没有真正的语义差异。使用您认为最能传达代码含义的任何格式。在上面的例子中,我选择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;