zoukankan      html  css  js  c++  java
  • STL algorithm算法merge(34)

    merge原型:

    std::merge

    default (1)
    template <class InputIterator1, class InputIterator2, class OutputIterator>
      OutputIterator merge (InputIterator1 first1, InputIterator1 last1,
                            InputIterator2 first2, InputIterator2 last2,
                            OutputIterator result);
    
    custom (2)
    template <class InputIterator1, class InputIterator2,
              class OutputIterator, class Compare>
      OutputIterator merge (InputIterator1 first1, InputIterator1 last1,
                            InputIterator2 first2, InputIterator2 last2,
                            OutputIterator result, Compare comp);

    该函数是将两个范围内的元素合并到一个新的位置(result)中,而且保证有序。

    使用operator<进行比較。

    在使用该函数之前,应该保证两个子范围内的元素都是有序的

    result的大小为两个子范围元素个数之和。应保证result的大小足以容纳全部的元素。

    返回值为result的最后一个被覆盖元素的下一个元素的迭代器

    其行为类似于:

    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++;
      }
    }

    一个简单的样例:(result本身为空)

    #include <iostream>
    #include <vector>
    #include <array>
    #include <algorithm>
    using namespace std;
    void merge2(){
        vector<int> vi{1,3,5,7,9};
        array<double,4> ad{2.0,4.0,6.0,8.0};
        cout<<"vi=";
        for(int i:vi)
            cout<<i<<" ";
        cout<<endl;
        cout<<"ad=";
        for(double i:ad)
            cout<<i<<" ";
        cout<<endl;
    
        vector<double> vr(vi.size()+4);
        auto it=merge(vi.begin(),vi.end(),ad.begin(),ad.end(),vr.begin());
         cout<<"vr=merge(vi.begin(),vi.end(),ad.begin(),ad.end(),vr.begin())
    vr=";
        for(double i:vr)
            cout<<i<<" ";
        cout<<endl;
    
        if(it==vr.end())
            cout<<"merge(vi.begin(),vi.end(),ad.begin(),ad.end(),vr)=vr.end()!"<<endl;
    
    }
    
    执行截图:



    result本身不为空的时候:

    #include <iostream>
    #include <vector>
    #include <array>
    #include <algorithm>
    using namespace std;
    void merge3(){
        vector<int> vi{1,3,5,7,9};
        array<double,4> ad{2.0,4.0,6.0,8.0};
        cout<<"vi=";
        for(int i:vi)
            cout<<i<<" ";
        cout<<endl;
        cout<<"ad=";
        for(double i:ad)
            cout<<i<<" ";
        cout<<endl;
    
        vector<double> vr{11,22,33,44,55,66,77,88,99,111,222,333};
        for(double i:vr)
            cout<<i<<" ";
        cout<<endl;
        auto it=merge(vi.begin(),vi.end(),ad.begin(),ad.end(),vr.begin());
         cout<<"after merge(vi.begin(),vi.end(),ad.begin(),ad.end(),vr.begin())
    vr=";
        for(double i:vr)
            cout<<i<<" ";
        cout<<endl;
    
        if(it==vr.end())
            cout<<"merge(vi.begin(),vi.end(),ad.begin(),ad.end(),vr)=vr.end()!"<<endl;
        else
            cout<<"it="<<*it<<endl;
    
    
    }
    
    
    执行截图:


    能够看到,这样的情况下返回的迭代器指向111,也就是最后一个被覆盖的元素的下一个!


    ——————————————————————————————————————————————————————————————————

    //写的错误或者不好的地方请多多指导,能够在以下留言或者点击左上方邮件地址给我发邮件,指出我的错误以及不足,以便我改动,更好的分享给大家,谢谢。

    转载请注明出处:http://blog.csdn.net/qq844352155

    author:天下无双

    Email:coderguang@gmail.com

    2014-9-17

    于GDUT

    ——————————————————————————————————————————————————————————————————




  • 相关阅读:
    9.Java通过axis调用WebService
    8.AXIS1基础
    7.Web Service 调用天气代码
    Exception in thread "main" java.lang.NoClassDefFoundError: org.jaxen.NamespaceContext
    webservices 服务器未能识别 HTTP 头 SOAPAction 的值:.
    几种流行Webservice框架性能对比
    6. 使用Axis开发WebService程序
    5. webservice通信调用天气预报接口实例
    4.菜鸟教你一步一步开发 web service 之 axis 客户端创建
    3.菜鸟教你一步一步开发 web service 之 axis 服务端创建
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4007228.html
Copyright © 2011-2022 走看看