#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void printVec(const vector<int> &v)
{
for (vector<int>::const_iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
class Solution
{
public:
void merge(vector<int> &nums1, int m, vector<int> &nums2, int n)
{
vector<int>::iterator it_nums1 = nums1.begin();
vector<int>::iterator it_nums2 = nums2.begin();
vector<int> num_tmp;
num_tmp.reserve(m + n);
while ((it_nums1 < nums1.end()) || (it_nums2 < nums2.end()))
{
if( (it_nums1 < nums1.begin() + m) && (*it_nums1 < *it_nums2) )
{
num_tmp.push_back(*it_nums1);
it_nums1++;
}
else
{
num_tmp.push_back(*it_nums2);
it_nums2++;
}
}
nums1.swap(num_tmp);
}
};
int main(int argc, char *argv[])
{
int m = 3, n = 3;
vector<int> vec_num1;
vec_num1.reserve(m + n);
vec_num1.push_back(1);
vec_num1.push_back(2);
vec_num1.push_back(3);
vector<int> vec_num2;
vec_num2.reserve(n);
vec_num2.push_back(2);
vec_num2.push_back(5);
vec_num2.push_back(6);
Solution solu;
printVec(vec_num1);
printVec(vec_num2);
solu.merge(vec_num1, m, vec_num2, n);
printVec(vec_num1);
return 0;
}