簡體   English   中英

C ++停止for循環的“最佳”方法是什么?

[英]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.

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