STL algorithm算法merge(34)

merge原型:

std::merge

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

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

使用operator<进行比较。

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

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

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

其行为类似于:

template 
  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 
#include 
#include 
#include 
using namespace std;
void merge2(){
    vector vi{1,3,5,7,9};
    array ad{2.0,4.0,6.0,8.0};
    cout<<"vi=";
    for(int i:vi)
        cout< 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())\nvr=";
    for(double i:vr)
        cout<
运行截图:

STL algorithm算法merge(34)_第1张图片

result本身不为空的时候:

#include 
#include 
#include 
#include 
using namespace std;
void merge3(){
    vector vi{1,3,5,7,9};
    array ad{2.0,4.0,6.0,8.0};
    cout<<"vi=";
    for(int i:vi)
        cout< vr{11,22,33,44,55,66,77,88,99,111,222,333};
    for(double i:vr)
        cout<STL algorithm算法merge(34)_第2张图片
可以看到,这种情况下返回的迭代器指向111,也就是最后一个被覆盖的元素的下一个!


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

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

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

author:天下无双

Email:[email protected]

2014-9-17

于GDUT

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




你可能感兴趣的:(STL,算法,STL,算法)