[英]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++;
}
}
在每次迭代中, first1
或first2
都會遞增,因此在某個時刻它們之一將分別等於last1
或last2
(只要正確指定了參數),因此將執行return
語句之一。
退出循環有兩種方法:
繼續條件變為假。 顯然,這里不會發生這種情況,因為文字true
永遠不會變為false。
從循環內部到某個外部位置的分支。 可以執行此操作的語句包括break
, return
, goto
, throw
,對longjmp
的調用或exit
函數等。此代碼在循環中確實有兩個return
語句。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.