簡體   English   中英

std :: merge如何在C ++中工作?

[英]How does std::merge work in C++?

下面的代碼直接取自C ++中std :: merge的鏈接(在結尾處給出)。 我了解在while循環(復制部分)中發生了什么,但我不知道該循環何時結束。 由於while (true) ,此循環不應永遠運行嗎?

template <class InputIterator1, class InputIterator2, class OutputIterator> OutputIterator 
  merge (InputIterator1 first1, InputIterator1 last1, 
         InputIterator2 first2, InputIterator2 last2, 
         OutputIterator result)
{   
    while (true) {
        if (first1==last1) return std::copy(first2,last2,result);
        if (first2==last2) return std::copy(first1,last1,result);
        *result++ = (*first2<*first1)? *first2++ : *first1++;   
    } 
}

http://www.cplusplus.com/reference/algorithm/merge/

在每次迭代中, first1first2都會遞增,因此在某個時刻它們之一將分別等於last1last2 (只要正確指定了參數),因此將執行return語句之一。

退出循環有兩種方法:

  1. 繼續條件變為假。 顯然,這里不會發生這種情況,因為文字true永遠不會變為false。

  2. 從循環內部到某個外部位置的分支。 可以執行此操作的語句包括breakreturngotothrow ,對longjmp的調用或exit函數等。此代碼在循環中確實有兩個return語句。

暫無
暫無

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

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