transform

[機能]

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

[形式]
#include <algorithm>

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>
    
    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 {0, 1, 2, 3, 4};
    	printf("v1 :");
    	for (auto x : v1)
    		printf("  %d", x);
    	printf("\n");
    	vector<int> v2 {10, 20, 30, 40, 50};
    	printf("v2 :");
    	for (auto x : v2)
    		printf("  %d", x);
    	printf("\n");
    					// v1 の各要素を負にする
    	printf("v1 の各要素を負にする\n");
    	transform(v1.begin(), v1.end(), v1.begin(), negative);   // 関数
    	printf("  v1 :");
    	for (auto x : v1)
    		printf("  %d", x);
    	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>());   // 関数オブジェクト plus
    //	transform(v1.begin(), v1.end(), v2.begin(), v1.begin(), [](int x, int y){ return x+y; });   // ラムダ式
    	printf("  v1 :");
    	for (auto x : v1)
    		printf("  %d", x);
    	printf("\n");
    
    	return 0;
    }
    			
    (出力)
    v1 :  0  1  2  3  4
    v2 :  10  20  30  40  50
    v1 の各要素を負にする
      v1 :  0  -1  -2  -3  -4
    v1 と v2 を加え,v1 に保存する
      v1 :  10  19  28  37  46			
[参照]

replacegenerate

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