C++算法 inplace_merge()函数用于将两个连续的排序参数[first,last)和[middle,last)合并为一个排序参数[first,last)。
default (1) template <class BidirectionalIterator> void inplace_merge (BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last); custom (2) template <class BidirectionalIterator, class Compare> void inplace_merge (BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last, Compare comp);
first:一个双向迭代器,该迭代器指向两个要合并的连续排序参数中的第一个参数中的第一个元素,并将其合并到单个参数中。
last:一个双向迭代器,它指向两个要合并的连续参数中的第二个参数中最后一个过去的元素,以将其合并并分为一个参数。
middle:一个双向迭代器,该迭代器指向要合并并排序到单个参数内的两个连续排序参数中的第二个参数中的第一个元素的位置。
comp :用户定义的二进制谓词函数,该函数接受两个参数,如果两个参数的顺序为false,则返回true。
没有
让我们看一个简单的示例来演示inplace_merge()的用法:
链接:https://www.learnfk.comhttps://www.learnfk.com/c++/cpp-algorithm-inplace-merge-function.html
来源:LearnFk无涯教程网
#include <iostream> #include <algorithm> #include <vector> using namespace std; void printVector(vector<int>& v) { for (vector<int>::iterator it = v.begin(); it != v.end(); ++it) cout << ' ' << *it; cout << '\n'; } int main () { vector<int> v1 = {5,10,15,20,25}, v2 = {50,40,30,20,10}, v3(10); vector<int>::iterator it; sort(v1.begin(), v1.end()); sort(v2.begin(), v2.end()); it = copy(v1.begin(), v1.end(), v3.begin()); copy(v2.begin(), v2.end(), it); inplace_merge(v3.begin(), it, v3.end()); cout << "Vector v1 : "; printVector(v1); cout << "Vector v2 : "; printVector(v2); cout << "Vector v3 : "; printVector(v3); }
输出:
Vector v1 : 5 10 15 20 25 Vector v2 : 10 20 30 40 50 Vector v3 : 5 10 10 15 20 20 25 30 40 50
让我们看另一个简单的例子:
#include <iostream> //std::cout #include <algorithm> //std::inplace_merge, std::sort, std::copy #include <vector> //std::vector using namespace std; int main () { int first[] = {5,10,15,20,25}; int second[] = {50,40,30,20,10}; vector<int> v(10); vector<int>::iterator it; sort (first,first+5); sort (second,second+5); it=copy (first, first+5, v.begin()); copy (second,second+5,it); inplace_merge (v.begin(),v.begin()+5,v.end()); cout << "The resulting vector contains:"; for (it=v.begin(); it!=v.end(); ++it) cout << ' ' << *it; cout << '\n'; return 0; }
输出:
The resulting vector contains: 5 10 10 15 20 20 25 30 40 50
我们来看另一个简单的示例,该示例演示如何使用operator <来使用inplace_merge():
#include <iostream> #include <algorithm> #include <vector> using namespace std; int main(void) { vector<int> v = {1, 3, 2, 4, 5}; inplace_merge(v.begin(), v.begin() + 2, v.end()); for (auto it = v.begin(); it != v.end(); ++it) cout << *it << endl; return 0; }
输出:
1 2 3 4 5
让我们看一个简单的示例,通过比较函数演示inplace_merge()的用法:
#include <iostream> #include <algorithm> #include <vector> using namespace std; bool descending_sort(int a, int b) { return (a > b); } int main(void) { vector<int> v = {3, 1, 5, 4, 2}; inplace_merge(v.begin(), v.begin() + 2, v.end(), descending_sort); for (auto it = v.begin(); it != v.end(); ++it) cout << *it << endl; return 0; }
输出:
5 4 3 2 1
让我们看另一个简单的例子:
#include <vector> #include <iostream> #include <algorithm> using namespace std; template<class Iter> void merge_sort(Iter first, Iter last) { if (last - first > 1) { Iter middle = first + (last - first)/2; merge_sort(first, middle); merge_sort(middle, last); inplace_merge(first, middle, last); } } int main() { vector<int> v{10, 2, -9, 0, 9, 7, 1, 3, 4}; merge_sort(v.begin(), v.end()); for(auto n : v) { cout << n << ' '; } cout << '\n'; return 0; }
输出:
-9 0 1 2 3 4 7 9 10
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)