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"
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Spring中所使用的设计模式

    Spring中所使用的设计模式

  • 标志寄存器EFLAGS中的IF标志可以屏蔽MINI中断相应_cpsr寄存器标志位

    标志寄存器EFLAGS中的IF标志可以屏蔽MINI中断相应_cpsr寄存器标志位EFL介绍EFL的所有标志全称如上图所示,前8位(0~7)因为用不到,所以不作介绍,想看的可以点击原文链接。状态控制位1.追踪标志位TF(TrapFlag)当追踪标志TF被置为1时,CPU进入单步执行方式,即每执行一条指令,产生一个单步中断请求。这种方式主要用于程序的调试。指令系统中没有专门的指令来改变标志位TF的值,但可直接通过文末介绍的方法来进行修改。2.中断允许标志位…

    2022年10月30日
  • css background之设置图片为背景技巧

    css background之设置图片为背景技巧

  • 卸载奇安信天擎,流氓软件怎么卸载_奇安信和360天擎

    卸载奇安信天擎,流氓软件怎么卸载_奇安信和360天擎奇安信天擎,很多朋友应该都不陌生,现在很多公司都要求每个员工的电脑上必须安装奇安信天擎这个软件,尤其是稍微大一点的公司,数据需要保密或容易被攻击的公司,奇安信可以有效的防御这些攻击。看到这是不是有朋友在想这不是一个很好的防御软件吗,为什么说是流氓软件呢?这个软件之所以叫它流氓软件,是因为这个软件一旦安装,既无法退出也无法卸载,有些朋友现在会想,这个软件就放那放着就好了啊,反正是防御的软件,我只能说你还没有了解奇安信的缺点。奇安信与一切杀毒软件冲突,公司要求安装奇安信,你就要把电脑之前的杀毒软件卸载,这

  • java的单例模式是什么_Java单例模式是什么

    java的单例模式是什么_Java单例模式是什么Java单例模式是什么时间:2017-07-14来源:华清远见JAVA学院Java单例模式简介在GoF的23种设计模式中,单例模式是比较简单的一种。然而,有时候越是简单的东西越容易出现问题。下面就单例设计模式详细的探讨一下。所谓单例模式,简单来说,就是在整个应用中保证只有一个类的实例存在。就像是JavaWeb中的application,也就是提供了一个全局变量,用处相当广泛,比如保存全…

  • 彻底解决mysql中文乱码

    彻底解决mysql中文乱码mysql是我们项目中非常常用的数据型数据库。但是因为我们需要在数据库保存中文字符,所以经常遇到数据库乱码情况。下面就来介绍一下如何彻底解决数据库中文乱码情况。

发表回复

您的电子邮箱地址不会被公开。

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