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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm与mysql连接错误系统_pycharm怎么使用anaconda环境

    pycharm与mysql连接错误系统_pycharm怎么使用anaconda环境pycharm与数据库MySQL连接

    2022年8月28日
    0
  • 协方差公式推导_二维正态分布cov协方差公式

    协方差公式推导_二维正态分布cov协方差公式协方差公式推导cov(X,Y)=∑ni=1(Xi−X¯)(Yi−Y¯)n=E[(X−E[X])(Y−E[Y])]cov(X,Y)=\frac{\sum_{i=1}^{n}(X_i-\bar{X})(Y_i-\bar{Y})}{n}=E[(X-E[X])(Y-E[Y])]=E[XY−E[X]Y−XE[Y]+E[X]E[Y]]=E[XY-E[X]Y-XE[Y]+E[X]E[Y]]因为均值

    2022年10月22日
    0
  • Error filterStart startup failed due to previous errors

    Error filterStart startup failed due to previous errorsErrorfilterStartstartupfailedduetopreviouserrors2007-2-2315:06:44org.apache.catalina.core.AprLifecycleListenerlifecycleEvent信息:TheApacheTomcatNativelibrarywhichallowsoptimalperformanceinproductionenvironmentswasnotfoundonthe

    2022年7月11日
    18
  • 如何查看Linux操作系统版本

    如何查看Linux操作系统版本参考地址:http://www.ggat.cn/newsInfo.html/71 如何查看Linux操作系统版本1.查看内核版本命令: [root@tg]#cat/proc/version Linuxversion3.10.0-693.2.2.el7.x86_64(builder@kbuilder.dev.centos.org)(gccversion4….

    2022年5月29日
    40
  • 浅谈Vue.js_Vue js quote

    浅谈Vue.js_Vue js quote作为一名Vue.js的忠实用户,我想有必要写点文章来歌颂这一门美好的语言了,我给它的总体评价是“简单却不失优雅,小巧而不乏大匠”,下面将围绕这句话给大家介绍Vue.js,希望能够激发你对Vue.js的

    2022年8月1日
    5
  • WinINet 与 WinHTTP简介

    WinINet 与 WinHTTP简介之前一直有听到WinHTTP和WinINet这两种网络服务,是Microsoft提供的两套API,但一直没有系统的用过,趁次机会一起来将这个整理一下。    首先了解一下WinINet:    WinInet,全称TheMicrosoftWindowsInternet,应用程序可以通过它提供的API访问标准的网络协议,比如FTP和HTTP等。WinINet不支持服务端的

    2022年7月11日
    17

发表回复

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

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