[英]C++ What is the “best” way to stop a for loop?
假設您想在C ++中創建一個for循環,但是除了確定的條件之外,您還知道循環何時或應該停止。 注意,這種條件不必一定是硬編碼的,循環也不必一直具有這樣的確定值。 這只是一個示例,可能對隨機循環有用,或者在運行時確定內容的人。 讓我們保持這個示例簡單,重點關注可以應用於編程中任何此類相關任務的解決方案。
我想比較這兩種解決方案。 第一個使用breaks語句,第二個使用多重或組合條件。 就效率或可靠性而言,哪種是完成任務的“最佳”或“正確”方法。 哪一個較不容易出現錯誤? 隨意提出其他解決方案。
const int MAX_SIZE = 10;
int myArray[MAX_SIZE] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// two ways to stop a loop
for (int x = 0; x < MAX_SIZE; x++) {
if (myArray[x] == 7) {
break;
}
cout << myArray[x] << “ “; // fixed
}
for (int x = 0; (x < MAX_SIZE) && (myArray[x] != 7); x++) {
cout << myArray[x] << “ “;
}
首先,循環的行為明顯不同-第一個循環仍顯示數字7
而另一個則不。
萬一換行,對於編譯器來說並沒有太大的區別,兩種解決方案都將以幾乎相同的本機代碼進行編譯。
關於可讀性(並易於出錯):對於這樣一個簡單的規則,將其作為條件的一部分可能更好,更易讀。 但是,當它變得更加復雜時,可能值得引入一些臨時變量,然后break
變體將更易於閱讀。 實際上,對於更復雜的算法而言,在循環內部使用break
是非常普遍的,甚至在具有break
內部的無限循環中也是如此。
正如其他人也指出的那樣,這兩種方法並不等效,因為一種方法產生的輸出要多於另一種。 但是,我想這只是一個錯字,您可以通過運行代碼來肯定地識別出來。
出於比較目的,如果您需要使用更多的停止條件(比起一個很長的if將更具可讀性)或在停止循環之前執行其他操作,則第一個比較容易概括。 例如,您可能想先檢查myArray[x] == 7
,然后在中斷循環之前輸出某些內容,也許是這樣做的原因。 因此,當您的代碼復雜時,第一種方法更好。
在性能方面,這些方法非常相似。
這兩個循環不相等。 為了使第一個循環產生與第二個循環相同的輸出(至少對於您指定的數組內容),您需要將其更改為
for (int x = 0; x < MAX_SIZE; x++)
{
if (myArray[x] == 7)
{
break;
}
cout << myArray[x] << " ";
}
在實踐中,大多數人會發現您的第二種形式更具可讀性,因為結束循環有一個明顯的條件,而不是可以終止循環的兩個不同位置。 那就是我通常會使用的那個。
您認為您擁有的表格是等效的事實表明可讀性問題正在影響您。 因此,第二種形式肯定會更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.