merge原型:
default (1) | template |
---|---|
custom (2) | template
|
使用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++;
}
}
#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<
运行截图:
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<
运行截图:
可以看到,这种情况下返回的迭代器指向111,也就是最后一个被覆盖的元素的下一个!
——————————————————————————————————————————————————————————————————
//写的错误或者不好的地方请多多指导,可以在下面留言或者点击左上方邮件地址给我发邮件,指出我的错误以及不足,以便我修改,更好的分享给大家,谢谢。
转载请注明出处:http://blog.csdn.net/qq844352155
author:天下无双
Email:[email protected]
2014-9-17
于GDUT
——————————————————————————————————————————————————————————————————