replace,replace_if,replace_copy,及び,replace_copy_if の使用方法です.
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
// 奇数の判定
class is_odd : public unary_function<int, bool>
{
public:
result_type operator() (argument_type k)
{
return (result_type)(k % 2);
}
};
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");
// 2 を 20 で置き換える
printf("**v1 の 2 を 20 で置き換える**\n");
replace(v1.begin(), v1.end(), 2, 20);
for (it = v1.begin(); it != v1.end(); it++)
printf(" %d", *it);
printf("\n");
// 奇数を 30 で置き換える
printf("**v1 の 奇数を 30 で置き換える**\n");
replace_if(v1.begin(), v1.end(), is_odd(), 30);
for (it = v1.begin(); it != v1.end(); it++)
printf(" %d", *it);
printf("\n");
// 再初期設定
printf("**初期状態 v1**\n");
v1.clear();
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 < 7; i1++)
v2.push_back(10*(i1+1));
for (it = v2.begin(); it != v2.end(); it++)
printf(" %d", *it);
printf("\n");
// 2 を 20 で置き換 v2 にコピー
printf("**v1 の 2 を 20 で置き換え v2 にコピー**\n");
replace_copy(v1.begin(), v1.end(), v2.begin(), 2, 20);
for (it = v2.begin(); it != v2.end(); it++)
printf(" %d", *it);
printf("\n");
// 奇数を 30 で置き換え v2 にコピー
printf("**v1 の 奇数を 30 で置き換え v2 にコピー**\n");
replace_copy_if(v1.begin(), v1.end(), v2.begin(), is_odd(), 30);
for (it = v2.begin(); it != v2.end(); it++)
printf(" %d", *it);
printf("\n");
return 0;
}
(出力)
**初期状態 v1**
1 2 3 4 5
**v1 の 2 を 20 で置き換える**
1 20 3 4 5
**v1 の 奇数を 30 で置き換える**
30 20 30 4 30
**初期状態 v1**
1 2 3 4 5
**初期状態 v2**
10 20 30 40 50 60 70
**v1 の 2 を 20 で置き換え v2 にコピー**
1 20 3 4 5 60 70
**v1 の 奇数を 30 で置き換え v2 にコピー**
30 2 30 4 30 60 70