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);

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

使用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;elsecout<<"it="<<*it<<endl;}

执行截图:


能够看到,这样的情况下返回的迭代器指向111,也就是最后一个被覆盖的元素的下一个!

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

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

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

author:天下无双

Email:coderguang@gmail.com

2014-9-17

于GDUT

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

转载于:https://www.cnblogs.com/blfshiye/p/4007228.html

STL algorithm算法merge(34)相关推荐

  1. [C++ STL] 常用算法总结

    1 概述 STL算法部分主要由头文件<algorithm>,<numeric>,<functional>组成.要使用 STL中的算法函数必须包含头文件<alg ...

  2. stl algorithm -- sort ,unique

    在写私信群聊代码的时候碰到怎么把一个vector<Int> 元素unique化的问题,基本上就是需要下面这么做,用<algorithm>中的,先sort再unique 1 #i ...

  3. C++超详细STL常用算法总结

    STL 常用算法: 写在开篇:整理了一些stl中很常用的算法,涉及到比较,交换,查找,遍历,复制,修改等.值得大嘎收藏呀!! 目录: STL 常用算法: 1. 常用遍历算法: 1.1 for_each ...

  4. STL堆算法性能分析与优化方法(GCC4.4.2 stl_heap.h源代码分析与改进方案)

    堆是常用的数据结构,经常用于实现优先队列中,huffman编码中的就用到了优先队列. 本质上就是用数组实现的完全二叉树保证父节点的关键码都大于或者等于其子节点的关键码(最大堆,反过来是最小堆),下图是 ...

  5. 黑马C++笔记——STL常用算法

    STL常用算法 1.概述 STL算法主要是由头文件algorithm functional numeric组成 algorithm 是所有STL文件中最大的一个,涉及到比较.交换.查找.遍历.复制.修 ...

  6. 熬夜爆肝!C++核心STL常用算法汇总整理【2W字干货预警 建议收藏】

    前言 1 STL- 常用算法 1.1 常用遍历算法 1.1.1 for_each 1.1.2 transform 1.2 常用查找算法 1.2.1 find 1.2.2 find_if 1.2.3 a ...

  7. STL中算法锦集(四)

    STL中算法锦集(四) 文章目录 STL中算法锦集(四) 一.< algorithm > 1.std::is_permutation 2.std::is_sorted 3.std::is_ ...

  8. STL中算法锦集(三)

    STL中算法锦集(三) 文章目录 STL中算法锦集(三) 一.< algorithm > 1.std::find_if 2.std::find_if_not 3.std::for_each ...

  9. STL中算法锦集(二)

    STL中算法锦集(二) 文章目录 STL中算法锦集(二) 一.< algorithm > 1.std::equal 2.std::equal_range 3.std::fill 4.std ...

最新文章

  1. 25个别出心裁的简历设计作品欣赏
  2. 据说腾讯的算法高手都是C++背景
  3. RecycleView 动画实现
  4. 启动oracle的三过程
  5. 【转】译文:.net 程序员易犯的7个通病
  6. Codeforces Round #660 (Div. 2)
  7. 街舞中的rolling机器人_REMEMBER街舞培训中心2020年元旦汇演
  8. ApacheCN DevOps 译文集(二)20211230 更新
  9. 文件上传_文件下载_后端获取登录用户---SpringCloud Alibaba_若依微服务框架改造---工作笔记003
  10. P1066 2^k进制数
  11. 数论1.0 数论基础
  12. 【C语言实现】goto语句实现简易关机程序
  13. linux系统双网卡不能同时启动,针对RHEL中双网卡IP不能同时被访问的解决方法
  14. python爬微信公众号教程_python爬搜狗微信获取指定微信公众号的文章
  15. visio画图复制粘贴到word_Visio 2010怎么复制图片 Visio粘贴图形到其它office程序
  16. [蓝桥杯]分解质因数
  17. 【vscode简单入门(三)】vscode巨实用的基础插件推荐(不定期更新)
  18. 学习记录657@python计算股价的回撤与收盘价回撤率组合图实现
  19. Linux编译之(1)C语言基础
  20. ecshop商品页面附件下载,京东淘宝购买,自定义按钮自定义连接

热门文章

  1. 家卫士扫地机器人好吗_扫地机器人哪个牌子好,家居达人教你选购优质扫地机器人...
  2. mac os10.11上使用proxychains
  3. 开发日记-20190621 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》
  4. 如何解读「量子计算应对大数据挑战:中国科大首次实现量子机器学习算法」?——是KNN算法吗?...
  5. codeforces 383D
  6. 探索存储机制(1-9)
  7. JDK8漫谈——增强接口
  8. LightOJ - 1265 概率
  9. hibernate映射(单向双向的一对多、多对一以及一对一、多对一(转)
  10. RecyclerView android:layout_width=match_parent无效