adjacent_difference

[機能]

  隣接する要素間の差からなる系列を計算します.2 番目の形式では,2 引数関数
  <T> binary_op(<T>n1, <T>n2>
によって,差の計算方法を指定できます.この関数において,n1 及び n2 が,前回及び今回の要素の値を示します.

[形式]
	#include <numeric>
	#include <functional>

	template <class InputIterator, class OutputIterator> OutputIterator adjacent_difference(InputIterator first, InputIterator last, OutputIterator result);
	template <class InputIterator, class OutputIterator, class BinaryOperation> OutputIterator adjacent_difference(InputIterator first, InputIterator last, OutputIterator result, Binary_operation binary_op);
		

[使用例]

  1. 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
    			
[参照]

partial_sumaccumulateinner_product

菅沼ホーム 本文目次 演習問題解答例 付録目次 索引