transform

[機能]

  イテレータで指定された範囲の要素に対して,1 引数関数(上の表現),または,2 引数関数(下の表現)の結果を適用し,指定した場所に保存します.

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

	template <class InputIterator, class OutputIterator, class UnaryOperation> OutputIterator transform(InputIterator first, InputIterator last, OutputIterator result, UnaryOperation op);
	template <class InputIterator1, class InputIterator2, class OutputIterator, class BinaryOperation> OutputIterator transform(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, OutputIterator result, BinaryOperation binary_op);
		

[使用例]

  1. transform の使用方法です.関数でも,関数オブジェクトでも可能です.
    #include <stdio.h>
    #include <vector>
    #include <algorithm>
    #include <functional>
    using namespace std;
    
    int negative(int n) { return -n; }
    class plus_e
    {
    	public:
    		int operator() (int a, int b)
    		{
    			return a + b;
    		}
    };
    
    int main()
    {
    	vector<int> v1, v2;
    	vector<int>::iterator it;
    					// 初期設定
    	printf("**初期状態 v1**\n");
    	for (int i1 = 0; i1 < 5; i1++)
    		v1.push_back(i1+1);
    	for (it = v1.begin(); it != v1.end(); it++)
    		printf("  %d", *it);
    	printf("\n");
    
    	printf("**初期状態 v2**\n");
    	for (int i1 = 0; i1 < 5; i1++)
    		v2.push_back(10*(i1+1));
    	for (it = v2.begin(); it != v2.end(); it++)
    		printf("  %d", *it);
    	printf("\n");
    					// v1 の各要素を負にする
    	printf("v1 の各要素を負にする\n");
    	transform(v1.begin(), v1.end(), v1.begin(), negative);
    	for (it = v1.begin(); it != v1.end(); it++)
    		printf("  %d", *it);
    	printf("\n");
    					// v1 と v2 を加え,v1 に保存する
    	printf("v1 と v2 を加え,v1 に保存する\n");
    	transform(v1.begin(), v1.end(), v2.begin(), v1.begin(), plus_e());   // 以下の方法でも可能
    //	transform(v1.begin(), v1.end(), v2.begin(), v1.begin(), plus<int>());
    	for (it = v1.begin(); it != v1.end(); it++)
    		printf("  %d", *it);
    	printf("\n");
    
    	return 0;
    }
    			
    (出力)
    **初期状態 v1**
      1  2  3  4  5
    **初期状態 v2**
      10  20  30  40  50
    v1 の各要素を負にする
      -1  -2  -3  -4  -5
    v1 と v2 を加え,v1 に保存する
      9  18  27  36  45
    			
[参照]

replace

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