ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

transform

STLのtransform()アルゴリズムは範囲内の各要素に指定した関数を適用することができるもの。

transform(start, end, result, func);
transform(start1, end1, start2, result, func);

上の形式では、startからendの範囲の要素にfuncを適用しresultに格納する。下の形式では、start1からend1の範囲の要素とstart2からの要素の二つをfuncに渡して結果をresultに格納する。
実際にint型のvectorで試してみたのが次のプログラム。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

// 2倍する関数
int func(int n)
{
    return n*2;
}

// 加算する関数
int add(int a, int b)
{
    return a+b;
}

int main()
{
    vector<int> v, v2, v3;

    for(int i=0; i<10; i++) v.push_back(i);
    for(int i=0; i<v.size(); i++) cout << v[i] << " ";
    cout << endl;

    // 各要素にfunc()を適応
    transform(v.begin(), v.end(), v.begin(), func);

    for(int i=0; i<v.size(); i++) cout << v[i] << " ";
    cout << endl;

    for(int i=0; i<10; i++) v2.push_back(i);
    for(int i=0; i<v2.size(); i++) cout << v2[i] << " ";
    cout << endl;

    for(int i=10; i<20; i++) v3.push_back(i);
    for(int i=0; i<v3.size(); i++) cout << v3[i] << " ";
    cout << endl;

    // v2とv3の各要素をadd()に渡し、結果をv2に
    transform(v2.begin(), v2.end(), v3.begin(), v2.begin(), add);

    for(int i=0; i<v2.size(); i++) cout << v2[i] << " ";
}

実行結果
0 1 2 3 4 5 6 7 8 9
0 2 4 6 8 10 12 14 16 18
0 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19
10 12 14 16 18 20 22 24 26 28