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