<algorithm>
头文件中,因此在使用它们之前,程序中必须提前引入该头文件:
#include <algorithm>
5,10,15,20,25
和7,14,21,28,35,42
,显然它们不仅有序,而且都是升序序列。因此借助 merge() 函数,我们就可以轻松获得如下这个有序序列:
5 7 10 15 17 20 25 27 37 47 57
可以看到,该序列不仅包含以上 2 个序列中所有的元素,并且其本身也是一个升序序列。//以默认的升序排序作为排序规则 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 都为输入迭代器,[first1, last1) 和 [first2, last2) 各用来指定一个有序序列;result 为输出迭代器,用于为最终生成的新有序序列指定存储位置;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 容器中。//该数组中存储有 2 个有序序列 int first[] = { 5,10,15,20,25,7,17,27,37,47,57 }; //用于存储新的有序序列 vector<int> myvector(11); //将 [first,first+5) 和 [first+5,first+11) 合并为 1 个有序序列,并存储到 myvector 容器中。 merge(first, first + 5, first + 5, first +11 , myvector.begin());可以看到,2 个有序序列全部存储到了 first 数组中,但只要给 merge() 函数传入正确的指针,仍可以将它们合并为 1 个有序序列。
//默认采用升序的排序规则 void inplace_merge (BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last); //采用自定义的 comp 排序规则 void inplace_merge (BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last, Compare comp);其中,first、middle 和 last 都为双向迭代器,[first, middle) 和 [middle, last) 各表示一个有序序列。
#include <iostream> // std::cout #include <algorithm> // std::merge using namespace std; int main() { //该数组中存储有 2 个有序序列 int first[] = { 5,10,15,20,25,7,17,27,37,47,57 }; //将 [first,first+5) 和 [first+5,first+11) 合并为 1 个有序序列。 inplace_merge(first, first + 5,first +11); for (int i = 0; i < 11; i++) { cout << first[i] << " "; } return 0; }程序执行结果为:
5 7 10 15 17 20 25 27 37 47 57
可以看到,first 数组中包含 2 个升序序列,借助 inplace_merge() 函数,实现了将这 2 个序列合并为 1 个升序序列,且新序列仍存储在 first 数组中。
本文链接:http://task.lmcjl.com/news/13985.html