#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
bool is_Odd(int x)
{
return x % 2 != 0;
}
int main()
{
// 初期設定
vector<int> v1 {0, 1, 2, 3, 4};
printf("v1 :");
for (auto x : v1)
printf(" %d", x);
printf("\n");
vector<int> v2 {10, 17, 21};
printf("v2 :");
for (auto x : v2)
printf(" %d", x);
printf("\n");
// copy
printf("**v1 の 2 番目の要素以降に v2 をコピー**\n");
copy(v2.begin(), v2.end(), v1.begin()+1);
printf(" v1 :");
for (auto x : v1)
printf(" %d", x);
printf("\n");
printf("**v1 の最初に v2 の最初の 1 個をコピー**\n");
copy_n(v2.begin(), 1, v1.begin());
printf(" v1 :");
for (auto x : v1)
printf(" %d", x);
printf("\n");
printf("**v1 の最初に v2 内の奇数要素だけをコピー**\n");
copy_if(v2.begin(), v2.end(), v1.begin(), is_Odd); // 関数
// copy_if(v2.begin(), v2.end(), v1.begin(), [](int x){ return x%2 > 0; }); // ラムダ式
printf(" v1 :");
for (auto x : v1)
printf(" %d", x);
printf("\n");
printf("**v1 の 2 番目の前に v2 を挿入コピー**\n");
copy(v2.begin(), v2.end(), inserter(v1, v1.begin()+1)); // inserter 参照
printf(" v1 :");
for (auto x : v1)
printf(" %d", x);
printf("\n");
printf("**v1 を v3 にコピー(挿入コピーでないとだめ)**\n");
vector<int> v3;
copy(v1.begin(), v1.end(), inserter(v3, v3.begin()));
printf(" v3 :");
for (auto x : v3)
printf(" %d", x);
printf("\n");
// copy_backward
printf("**v2 を v1 の一番後にコピー**\n");
copy_backward(v2.begin(), v2.end(), v1.end());
printf(" v1 :");
for (auto x : v1)
printf(" %d", x);
printf("\n");
return 0;
}