[英]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
提出了一個非常好的觀點 - 一個經常被遺忘但肯定有用的陳述。 我敢肯定,我們可能會想到其他差異。
嗯,這不是必需的,只是為了方便。 在你的第二個代碼中,你犯了一個小錯誤,這會使代碼與第一個代碼不同。
你的增量應該在循環的末尾,以便等同於第一個代碼,所以它應該是:
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.