merge()
函数用于将 2 个有序序列合并为 1 个有序序列,前提是这 2 个有序序列的排序规则相同(要么都是升序,要么都是降序)。并且最终借助该函数获得的新有序序列,其排序规则也和这 2 个有序序列相同。
merge()
函数支持自定义规则排序,merge()
有两种语法格式
//以默认的升序排序作为排序规则
OutputIterator merge (InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result);
//以自定义的 comp 规则作为排序规则
OutputIterator merge (InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result, Compare comp);
first1
,last1
,first2
,last2
,为输入迭代器,来指定两个有序序列,result
为输出迭代器,用于为最终生成的有序序列指定存储位置,comp
用于自定义排序规则。该函数会返回一个输出迭代器,其指向的是新有序序列中最后一个元素之后的位置。
注意,当采用第一种语法格式时,\([first1, last1)\) 和 \([first2, last2)\) 指定区域内的元素必须支持 \(<\) 小于运算符;同样当采用第二种语法格式时,\([first1, last1)\) 和 \([first2, last2)\) 指定区域内的元素必须支持 \(comp\) 排序规则内的比较运算符。
例如:
#include <iostream> // std::cout
#include <algorithm> // std::merge
#include <vector> // std::vector
using namespace std;
int main() {
//first 和 second 数组中各存有 1 个有序序列
int first[] = { 5,10,15,20,25 };
int second[] = { 7,17,27,37,47,57 };
//用于存储新的有序序列
vector<int> myvector(11);
//将 [first,first+5) 和 [second,second+6) 合并为 1 个有序序列,并存储到 myvector 容器中。
merge(first, first + 5, second, second + 6, myvector.begin());
//输出 myvector 容器中存储的元素
for (vector<int>::iterator it = myvector.begin(); it != myvector.end(); ++it) {
cout << *it << ' ';
}
return 0;
}
程序运行的结果为:5 7 10 15 17 20 25 27 37 47 57
可以看到,first 数组和 second 数组中各存有 1 个升序序列,通过借助 merge() 函数,我们成功地将它们合并成了一个有序序列,并存储到 myvector 容器中。
标签:myvector,函数,C++,merge,second,有序,序列,first From: https://www.cnblogs.com/martian148/p/17842719.html注意,merge() 函数底层是通过拷贝的方式实现合并操作的。换句话说,上面程序在采用 merge() 函数实现合并操作的同时,并不会对 first 和 second 数组有任何影响。