adjacent_difference の使用方法です.
#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, v2, v3;
vector<int>::iterator it;
// 初期設定
printf("**初期状態**\n");
v1.push_back(1);
v1.push_back(3);
v1.push_back(6);
v1.push_back(2);
v1.push_back(1);
for (it = v1.begin(); it != v1.end(); it++)
printf(" %d", *it);
printf("\n");
// v1 の各要素の差からなる系列
printf("v1 の各要素の差からなる系列\n");
adjacent_difference(v1.begin(), v1.end(), inserter(v2, v2.begin()));
for (it = v2.begin(); it != v2.end(); it++)
printf(" %d", *it);
printf("\n");
// v1 の偶数要素の部分和(最初は v1 の 1 番目の要素と必ず一致)
printf("v1 の各要素の差の 2 倍からなる系列(最初は v1 の 1 番目の要素と必ず一致)\n");
adjacent_difference(v1.begin(), v1.end(), inserter(v3, v3.begin()), sum);
for (it = v3.begin(); it != v3.end(); it++)
printf(" %d", *it);
printf("\n");
return 0;
}
(出力)
**初期状態**
1 3 6 2 1
v1 の各要素の差からなる系列
1 2 3 -4 -1
v1 の各要素の差の 2 倍からなる系列(最初は v1 の 1 番目の要素と必ず一致)
1 4 6 -8 -2