• 合并两个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;
    }
  • 相关阅读:
    Autofs
    markdown 基本语法
    Why Linux Doesn’t Need Defragmenting
    How to reconfigure installed dpkg package (tzdata, locales)
    weblogic性能监控
    exec
    在Oracle中查询表的大小
    hadoop主要概念的理解和学习
    ORACLE ASM中查询表空间使用情况、数据文件路径、裸设备磁盘总大小剩余大小
    linux 查看内存和cpu占用比较多的进程
  • 原文地址:https://www.cnblogs.com/tianzeng/p/10392232.html
Copyright © 2020-2023  润新知