zoukankan      html  css  js  c++  java
  • 合并两个sorted ranges(merge和inplace_merge)

    merge

    //版本一:用operator <比较元素 
    template <class InputerIterator1,class InputerIterator2,class OutputIterator>
    OutputIterator merge(InputerIterator1 first1,InputerIterator1 last1,
                         InputerIterator2 first2,InputerIterator2 last2,
                         OutputIterator result);
                         
    //版本二:用自定义的function object比较元素 
    template <class InputerIterator1,class InputerIterator2,class OutputIterator,class StrictWeakOrdering>
    OutputIterator merge(InputerIterator1 first1,InputerIterator1 last1,
                         InputerIterator2 first2,InputerIterator2 last2,
                         OutputIterator result,StrictWeakOrdering cmp);
    1. 把两个已排序的ranges合并成单一的一个range,若两个input range有等价(相同)的元素,第一个range的排在第二个range的之前,稳定的,元素相对位置不改变 
    2. [first1,last1)和[result,result+(last1-first1)+(last2-first2))不重叠 ,合并后的长度等于两个range长度之和
    3. [first2,last2)和[result,result+(last1-first1)+(last2-first2))不重叠

    inplace_merge

    //版本一:用operator <比较元素 
    template <class BidirectionalIterator>
    inline void inplace_merge(BidirectionalIterator first,BidirectionalIterator middle,BidirectionalIterator last);
    
    //版本二:用自定义的function object比较元素 
    template <class BidirectionalIterator,class StrictWeakOrdering>
    inline void inplace_merge(BidirectionalIterator first,BidirectionalIterator middle,BidirectionalIterator last,StrictWeakOrdering cmp);

      把两段已连接的分别排序的合成一个排序的range,两段递增的range合并成一个递增的range,range中的相对元素也不会改变,此算法会分配临时内存缓冲区,运行速度取决于多少内存可用

    #include <iostream>
    #include <vector>
    #include <iterator>
    #include <algorithm>
    using namespace std;
    
    int main()
    {
        vector<int> v{1,3,5,7,9};
        vector<int> v1{2,4,6,8,8,10};
        merge(v.begin(),v.end(),v1.begin(),v1.end(),ostream_iterator<int>(cout," "));
        cout<<endl;
        
        vector<int> v2{10,16,19,3,6,9};
        inplace_merge(v2.begin(),v2.begin()+3,v2.end());
        for_each(v2.begin(),v2.end(),[](int i)
        {
            cout<<i<<" ";
        });
        cout<<endl;
        return 0;
    }
  • 相关阅读:
    webpack.DefinePlugin
    webpack-dev-server配置指南(使用webpack3.0)
    Eclipse配色方案插件
    解决Sublime Text 3中文显示乱码问题(转)
    Java连接SqlServer2008数据库
    [转]java中判断字符串是否为数字的三种方法
    VS2008 SP1 安装卡在 VS90sp1-KB945140-X86-CHS的解决方法
    Python获取桌面路径
    关于fdisk命令
    socket 错误之:OSError: [WinError 10057] 由于套接字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。
  • 原文地址:https://www.cnblogs.com/tianzeng/p/10392232.html
Copyright © 2011-2022 走看看