下面是直接从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++;
}
}
答案 0 :(得分:4)
在每次迭代中,first1
或first2
都会递增,因此在某些时候,其中一个将分别等于last1
或last2
(前提是指定了参数正确),因此将执行return
个语句之一。
答案 1 :(得分:1)
退出循环有两种方法:
继续条件变为false。显然,这不会发生,因为文字true
永远不会变为假。
从循环内部到某个外部位置的分支。可以执行此操作的语句包括break
,return
,goto
,throw
,对longjmp
或exit
函数的调用等。代码在循环中有两个return
语句。