#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;
// 各要素を2乗する (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;
}