#include <iostream>
#include <array>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
	// 1 ~ 10 の数列を用意
	array<int, 10> data;
	iota(data.begin(), data.end(), 1);
	for (auto num : data) { cout << num << ","; } cout << endl;

	// 各要素を２乗する (map)
	vector<int> data2;
	transform(data.begin(), data.end(), back_inserter(data2), [](int num) {
		return num * num;
	});
	for (auto num : data2) { cout << num << ","; } cout << endl;
	
	// 奇数だけ取り出す (filter)
	vector<int> data3;
	copy_if(data2.begin(), data2.end(), back_inserter(data3), [](int num) {
		return num % 2;
	});
	for (auto num : data3) { cout << num << ","; } cout << endl;
	
	// すべてを掛け合わせる (reduce)
	int result = accumulate(data3.begin(), data3.end(), 1, [](int a, int b) {
		return a * b;
	});
	cout << result << endl;

	return 0;
}