首页 > 代码库 > STL algorithm算法merge(34)
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); |
使用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())\nvr="; 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())\nvr="; 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
——————————————————————————————————————————————————————————————————
STL algorithm算法merge(34)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。