merge 알고리듬은 두 개의 정렬 구간 [first1, last1)과 [first2, last2)를 [result, result + N)으로 합칩니다.
여기서, N = (last1 - first1) + (last2 - first2) 입니다.
inplace_merge 알고리듬은 서로 붙어 있는 두개의 정렬 구간 [first, middle), [middle, last)를 합쳐서 그 결과를 [first, last)에 놓습니다.
다음은 예제 코드입니다.
// Illustrating the generic merge algorithms
#include <iostream>
#pragma hdrstop
#include <algorithm>
#include <numeric>
#include <iterator>
#include <functional>
#include <vector>
using namespace std;
int main()
{
cout << "Illustrating the generic merge algorithms.\n\n";
// Initialize vector of integers:
vector<int> vector1(5);
vector<int> vector2(5);
vector<int> vector3(10);
iota(vector1.begin(), vector1.end(), 0);
transform(vector1.begin(), vector1.end(), vector1.begin(),
bind2nd(multiplies<int>(), 2)); // calculates even numbers
cout << "vector1:\n";
ostream_iterator<int> out(cout, " ");
copy(vector1.begin(), vector1.end(), out);
vector2 = vector1;
transform(vector2.begin(), vector2.end(), vector2.begin(),
bind2nd(plus<int>(), 1)); // calculates odd numbers
cout << "\nvector2:\n";
copy(vector2.begin(), vector2.end(), out);
// Merge contents of vector1 and vector2,
// putting result in vector3:
merge(vector1.begin(), vector1.end(),
vector2.begin(), vector2.end(),
vector3.begin());
cout << "\nvector3 after merge:\n";
copy(vector3.begin(), vector3.end(), out);
vector3.assign(vector1.begin(), vector1.end());
vector3.insert(vector3.end(), vector2.begin(), vector2.end());
cout << "\nvector3 after assign and insert:\n";
copy(vector3.begin(), vector3.end(), out);
// Merge the two sorted halves of vector3
// in place to obtain a sorted vector3:
inplace_merge(vector3.begin(), vector3.begin() + 5,
vector3.end());
cout << "\nvector3 after inplace_merge:\n";
copy(vector3.begin(), vector3.end(), out);
return 0;
}
결과는 다음과 같습니다.
Illustrating the generic merge algorithms.
vector1:
0 2 4 6 8
vector2:
1 3 5 7 9
vector3 after merge:
0 1 2 3 4 5 6 7 8 9
vector3 after assign and insert:
0 2 4 6 8 1 3 5 7 9
vector3 after inplace_merge:
0 1 2 3 4 5 6 7 8 9
|