#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
					// 奇数の判定
class is_odd : public unary_function<int, bool>
{
	public:
		result_type operator() (argument_type k)
		{
			return (result_type)(k % 2);
		}
};
int main()
{
	vector<int> v2;
					// 初期設定
	vector<int> v1 {0, 1, 2, 3, 4};
	printf("v1 :");
	for (auto x : v1)
		printf("  %d", x);
	printf("\n");
					// 2 を削除する
	printf("**v1 の 2 を削除する**\n");
	vector<int>::iterator it, end;
	end = remove(v1.begin(), v1.end(), 2);   // 注意
	printf("  v1(end) :");
	for (it = v1.begin(); it != end; it++)
		printf("  %d", *it);
	printf("\n");
	printf("  v1 :");
	for (auto x : v1)
		printf("  %d", x);
	printf("\n    size of v1 = %d (注意)\n", v1.size());
					// 奇数を削除する
	printf("**v1 の 奇数を削除する**\n");
	end = remove_if(v1.begin(), end, is_odd());   // 注意,単項関数オブジェクト
//	end = remove_if(v1.begin(), end, [](int x){ return x%2 > 0; });   // 注意,ラムダ式
	printf("  v1(end) :");
	for (it = v1.begin(); it != end; it++)
		printf("  %d", *it);
	printf("\n");
	printf("  v1 :");
	for (auto x : v1)
		printf("  %d", x);
	printf("\n    size of v1 = %d (注意)\n", v1.size());
					// 再初期設定
	v1.clear();
	printf("**再設定**\n");
	printf(" v1 :");
	for (int i1 = 0; i1 < 5; i1++)
		v1.push_back(i1+1);
	for (auto x : v1)
		printf("  %d", x);
	printf("\n    size of v1 = %d\n", v1.size());
	for (int i1 = 0; i1 < 7; i1++)
		v2.push_back(10*(i1+1));
	printf(" v2 :");
	for (auto x : v2)
		printf("  %d", x);
	printf("\n    size of v2 = %d\n", v2.size());
					// 2 を削除し v2 にコピー
	printf("**v1 の 2 を削除し v2 にコピー**\n");
	remove_copy(v1.begin(), v1.end(), v2.begin(), 2);
	printf("  v1 :");
	for (auto x : v1)
		printf("  %d", x);
	printf("\n    size of v1 = %d\n", v1.size());
	printf("  v2 :");
	for (auto x : v2)
		printf("  %d", x);
	printf("\n    size of v2 = %d\n", v2.size());
					// 奇数を削除し v2 にコピー
	printf("**v1 の 奇数を削除し v2 にコピー**\n");
	remove_copy_if(v1.begin(), v1.end(), v2.begin(), is_odd());
//	remove_copy_if(v1.begin(), v1.end(), v2.begin(), [](int x){ return x%2 > 0; });
	printf("  v1 :");
	for (auto x : v1)
		printf("  %d", x);
	printf("\n    size of v1 = %d\n", v1.size());
	printf("  v2 :");
	for (auto x : v2)
		printf("  %d", x);
	printf("\n    size of v2 = %d\n", v2.size());
	return 0;
}