簡體   English   中英

增量聲明的目的是什么?

[英]What is the purpose of the increment statement?

為什么增量語句在C ++中的for循環中是一個東西? 對我而言似乎是多余的,因為你可以簡單地將增量放在條件代碼中。 我在這里誤解了一些重要的事情嗎?

為了更好地說明我的問題,我包括一些偽代碼: - >之間有什么區別

for( int a = 10; a < 20; a = a + 1 )
{
    cout << a << endl;
}

for( int a = 10; a < 20;)
{
    a = a + 1
    cout << a << endl;
}

它有時不僅僅是方便。

這些是等價的:

for (int a = 10; a < 20;  a = a + 1) {
    cout << a << endl;
}

for (int a = 10; a < 20;  ) {
    cout << a << endl;
    a = a + 1;
}

但是,這些不是

// this works ...
for (int a = 10; a < 20;  a = a + 1) {
    if (blah ...)
        continue;
    cout << a << endl;
}

// this doesn't
for (int a = 10; a < 20;  ) {
    if (blah ...)
        continue;
    cout << a << endl;
    a = a + 1;
}

因為你來自python,一個慣用的 for循環就像一個python range ,但更強大。 用Cthon表示的C for循環將是:

for a in range(10,20,1)

將此表達為以下內容更為慣用:

for (a = 10;  a < 20;  a += 1)

因為循環增量為1 ,所以執行此操作更為慣用:

for (a = 10;  a < 20;  ++a)

但是,for循環是:

for ([init_stmt];  [test_stmt];  [incr_stmt])

任何* _stmt都可以復合:

for (x = 0, y = 0;  x < 10;  ++x, y += 2)

方便。

但是,您的等效代碼應為:

for (int a = 10; a < 20;)
{
    cout << a << endl;
    a = a + 1;
}

它在循環體的末端運行。

[對現在刪除/編輯的答案的質量抱怨抱怨;-)]

這個:

for (unsigned counter = 1; counter <= 10; ++counter) {
    doStuff();
}

很大程度上相當於:

unsigned counter = 1;
while (counter <= 10) {
    doStuff();
    ++counter;
}

除了明顯的例外,在第一種情況下,你有相當大的好處, counter的范圍只限於for block並且一旦完成就自動超出范圍 - 而對於后者, counter必須保留在 -循環后的范圍,它可能是無用的,甚至是障礙。

(切線:注意是c不支持批內for 。宣言或塊非頂級的任何聲明,直到C99 -但除非情有可原,任何人都無法使用至少C99現在正在一個可疑的選擇,恕我直言)

編輯:克雷格也對continue提出了一個非常好的觀點 - 一個經常被遺忘但肯定有用的陳述。 我敢肯定,我們可能會想到其他差異。

對於這個例子:

using namespace std;
int main(int argc, char** argv) {
    for( int a = 10; a < 20;)
       {
        a = a + 1;
        cout << a << endl;
   }


    return 0;
}

輸出將從11 - > 20

第一個例子是10 - > 19

你把增量部分放在循環外面這可能,但注意值10不會出現,因為你在打印a值之前增加你在第二個例子中打印值然后增加,最后循環,你退出循環而不到20,因為條件讓你退出循環

for循環過程

在遞增之前執行代碼塊是您的關鍵,執行代碼塊之后的for循環遞增

嗯,這不是必需的,只是為了方便。 在你的第二個代碼中,你犯了一個小錯誤,這會使代碼與第一個代碼不同。

你的增量應該在循環的末尾,以便等同於第一個代碼,所以它應該是:

for( int a = 10; a < 20;)
{
cout << a << endl;
a = a + 1; //increment at the end of instructions
}

這些小錯誤以及忘記包含增量的錯誤是為什么在for循環中包含增量是方便的。

或者您可以使用while循環:

while (condition)
{//instructions here;}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM