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

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

remove_copy, replace_copy

remove_copy()は指定した値を取り除きながらコピーするアルゴリズムで、replace_copy()は置換しながらコピーするアルゴリズム
_ifが付いたアルゴリズムはcount_if()と同様に条件を判定する関数を指定して処理を行うもの。
コピー先にはあらかじめコピーできる十分なサイズを確保しておく必要がある。
remove_copy_if()とreplace_copy()を使ったプログラムは次の通り。

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

// 10000超えてるなら真を返す関数
bool isover(int n)
{
    return (n>10000) ? true : false;
}

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

    // 整数をランダムに10個
    for(int i=0; i<10; i++) v.push_back(rand());
    for(int i=0; i<v.size(); i++) cout << v[i] << " ";
    cout << endl;

    // 10000を超えているものを取り除いてコピー
    remove_copy_if(v.begin(), v.end(), v2.begin(), isover);

    for(int i=0; i<v2.size(); i++) cout << v2[i] << " ";
    cout << endl;
	
    // 0を999に置換しながらコピー
    replace_copy(v2.begin(), v2.end(), v3.begin(), 0, 999);

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

実行結果
41 18467 6334 26500 19169 15724 11478 29358 26962 24464
41 6334 0 0 0 0 0 0 0 0
41 6334 999 999 999 999 999 999 999 999