我應該使用for或while循環來查找鏈接列表中的最後一個項目嗎?對於雖然用於查找鏈表中的最後一個項目
Item * last = list;
for (; last->next; last = last->next) ;
與
Item * last = list;
while (last->next)
{
last = last->next;
}
它是2線與5,它似乎幾乎同樣可讀。爲什麼我總是隻看到時間表?
我應該使用for或while循環來查找鏈接列表中的最後一個項目嗎?對於雖然用於查找鏈表中的最後一個項目
Item * last = list;
for (; last->next; last = last->next) ;
與
Item * last = list;
while (last->next)
{
last = last->next;
}
它是2線與5,它似乎幾乎同樣可讀。爲什麼我總是隻看到時間表?
如果你要比較線數,至少要儘量合理地做到這一點。該for
循環的格式應該更多這樣的:
Item * last = list;
for (; last->next; last = last->next)
;
這使得它更明顯的是,for
環路(故意)控制空語句。該while
循環可以寫成更是這樣的:
Item * last = list;
while (last->next)
last = last->next;
如果我們堅持,我們需要支架周圍連一個控制語句,他們還是結了相同的行數爲每個:
Item * last = list;
for (; last->next; last = last->next) {
;
}
VS:
Item * last = list;
while (last->next) {
last = last->next;
}
所以,行數的差異純粹由於您選擇使用(和,特別是,事實上,你沒有使用相同的,甚至格式化兩者格式相似)。
其他人已經指出,這些可能編譯爲相同的代碼,我同意你可以(也應該)期望這是合理的編譯器。
將風格和可讀性留作唯一區別。在這方面,for
循環顯然是優選的。很少有人從早期暴露於BASIC(或可能是FORTRAN)之後就沒有恢復過來,因此堅持認爲for
循環只應用於簡單的計數循環,如BASIC和FORTRAN中支持的循環。將這個限制應用於C或C++只是錯誤的和愚蠢的。 C的for
循環由於一個很好的理由而變得更加多才多藝,並且對其進行純粹的人爲限制根本沒有任何好處。
簡單的經驗法則:如果您實際上至少使用for
循環標題中的三個子句中的兩個,則最好使用for
循環而不是while
循環。具有空體的for
循環與具有空體的構造函數大致相似:對於不知道該語言的人可能不熟悉和困惑,但對任何真正瞭解該語言的人而言,它是微不足道的,並且與手指在他們的手上。
這兩個循環在邏輯上是等價的,而且很可能最終會被編譯爲相同的代碼。
使用你喜歡的任何一個。
因爲當您知道您要製作多少個步驟時會使用for-loop。而且,這個循環的變量可以是私有的(迭代器)。
使用while-loop直到符合條件。您可以使用此循環模擬所有循環。
但是,正如人們可以很容易看到的那樣,兩者都可以使用,因爲它們是等價的。
爲什麼我總是隻看到while表單?
有兩個原因,爲什麼while
形式是優選的:
for
循環之後的分號混淆了,或者甚至完全錯過了分號,不理解正在發生的事情。關於while
循環沒有這樣的混淆。for
帶循環變量聲明在循環之外提供了一個強烈的跡象表明,你實際上想要一個循環while
- 循環變量的範圍是循環的主體。當你在循環之外聲明它們時,這是因爲你想循環結果中的循環變量的結束值。我不知道第二點。如果你的循環有一個'continue',你可能仍然需要'for'提供的迭代保證。 – Barry
'for'循環通常表明循環變量是循環的私有局部細節。如果循環的目的是改變一些* other *,外部變量,那麼'while'版本在這方面就更清楚了。特別是,如果for循環的增量部分改變了外部狀態,這可能很難看到和混淆。 –
我相信兩者在記憶和時間上都是平等的。 –
這幾乎是個人偏好.. – Shury