STL 源代码分析 算法 stl_algo.h — merge

STL 源代码分析 算法 stl_algo.h — merge

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

本文senlie原版的,转载请保留此地址:http://blog.csdn.net/zhengsenlie

merge (应用于有序区间)

————————————————————————–

描写叙述:将两个经过排序的集合S1和S2。合并起来置于还有一段空间。所得结果也是一个有序(sorted)序列

思路:

1.遍历两个序列直到当中一个结束了

2.假设序列一的元素较小。将它放到结果序列中,并前进 1

3.假设序列二的元素较小,将它放到结果序列中。前前进 1

4.遍历结束后。将还没有遍历完的序列拷贝到结果序列的尾部

复杂度:O(m+n)

源代码:

template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator merge(InputIterator1 first1, InputIterator1 last1,
                     InputIterator2 first2, InputIterator2 last2,
                     OutputIterator result) {
  while (first1 != last1 && first2 != last2) {
    if (*first2 < *first1) {
      *result = *first2;
      ++first2;
    }
    else {
      *result = *first1;
      ++first1;
    }
    ++result;
  }
  return copy(first2, last2, copy(first1, last1, result)); // 之前一直不懂为什么 copy 之类的算法要返回一个指向 操作完后的序列的 last 的迭代器。

这行代码非常好地解释了原因}

演示样例:

int main()
{
  int A1[] = { 1, 3, 5, 7 };
  int A2[] = { 2, 4, 6, 8 };
  const int N1 = sizeof(A1) / sizeof(int);
  const int N2 = sizeof(A2) / sizeof(int);


  merge(A1, A1 + N1, A2, A2 + N2, 
        ostream_iterator<int>(cout, " "));
  // The output is "1 2 3 4 5 6 7 8"
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116746.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pic单片机流水灯循环右移c语言,PIC单片机流水灯程序[通俗易懂]

    pic单片机流水灯循环右移c语言,PIC单片机流水灯程序[通俗易懂]#INCLUDE”P16F877.inc”;org00h;gotoa1;org0ch;;******************************************;主程序段;******************************************a1movlw8;循环次数movwf40h;movlwB’01111111′;初显示值movwf…

    2022年5月1日
  • Android进阶-第三方框架使用汇总「建议收藏」

    Android进阶-第三方框架使用汇总「建议收藏」imageloading框架:1.1Glide1.1Glide:一、Glide-GettingStartedGlide:Glide就像Picasso,能从许多资源上加载和显示图片,也照顾了缓存和做图片操作的时候保持一个低的内存影响,它已经被官方谷歌应用程序(如GoogleI/O的应用程序2015)和Picasso一样受欢迎,在本系列中,我们将探索Glide在Picas

    2022年5月11日
  • python中的静态方法和类方法

    python中的静态方法和类方法

    2021年11月19日
  • python闭包详解_python闭包主要解决什么问题

    python闭包详解_python闭包主要解决什么问题闭包首先了解一下:如果在一个函数的内部定义了另一个函数,外部的我们叫他外函数,内部的我们叫他内函数。在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用

    2022年7月28日
  • jupyter跟python的关系_jupyter python

    jupyter跟python的关系_jupyter python大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。jupyter和pycharm区别如下:1、Python是一种广泛使用的高级的、通用的、解释的、动态编程语言。”Python是一种相当古老且流行的语言,它是开源的,常被应用于网站开发(利用Django、Flask等框架)、科学统计计算(NumPy、SciPy等库可以帮助计算)、软件开发等甚至更多。Jupyter项目开…

    2022年8月28日
  • 用户地理位置的聚类算法实现—基于DBSCAN和Kmeans的混合算法

    用户地理位置的聚类算法实现—基于DBSCAN和Kmeans的混合算法用户地理位置的聚类算法实现—基于DBSCAN和Kmeans的混合算法用户地理位置的聚类算法实现基于DBSCAN和Kmeans的混合算法聚类算法简介1基于划分的Kmeans算法2基于密度的DBSCAN算法用户地理位置信息的的聚类实现1基于Kmeans的聚类实现2基于DBSCAN的聚类实现基于DBSCAN和Kmeans的混合算法实现1.聚类算法简介聚类的目标是使同一类对象

    2022年6月18日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号