#include <stdio.h>
#include <vector>
#include <numeric>
using namespace std;
int sum(int n1, int n2)
{
return 2 * (n1 - n2);
}
int main()
{
// 初期設定
vector<int> v1 {1, 3, 6, 2, 1};
printf("v1 :");
for (auto x : v1)
printf(" %d", x);
printf("\n");
// v1 の各要素の差からなる系列
printf("v1 の各要素の差からなる系列\n");
vector<int> v2;
adjacent_difference(v1.begin(), v1.end(), inserter(v2, v2.begin())); // inserter 参照
// vector<int> v2(5); // inserter を利用しない場合は,大きさを前もって指定する必要がある
// adjacent_difference(v1.begin(), v1.end(), v2.begin());
printf(" v2 :");
for (auto x : v2)
printf(" %d", x);
printf("\n");
// v1 の各要素の差の 2 倍からなる系列(最初は v1 の 1 番目の要素と必ず一致)
printf("v1 の各要素の差の 2 倍からなる系列(最初は v1 の 1 番目の要素と必ず一致)\n");
vector<int> v3;
adjacent_difference(v1.begin(), v1.end(), inserter(v3, v3.begin()), sum); // 関数
// adjacent_difference(v1.begin(), v1.end(), inserter(v3, v3.begin()), [](int x, int y){ return 2 * (x - y); }); // ラムダ式
// vector<int> v3(5);
// adjacent_difference(v1.begin(), v1.end(), v3.begin(), sum);
// adjacent_difference(v1.begin(), v1.end(), v3.begin(), [](int x, int y){ return 2 * (x - y); });
printf(" v3 :");
for (auto x : v3)
printf(" %d", x);
printf("\n");
// 5 から始まる 10 個の正数列
printf("5 から始まる 10 個の正数列\n");
vector<int> v4(10);
iota(v4.begin(), v4.end(), 5);
printf(" v4 :");
for (auto x : v4)
printf(" %d", x);
printf("\n");
return 0;
}