繁体   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