replace

[機能]

  指定した範囲の指定した要素を,指定した要素に置き換えます.

[形式]
#include <algorithm>

template <class ForwardIterator, class T>
    void replace(ForwardIterator first, ForwardIterator last,
                 const T& old_value, const T& new_value);		

[使用例]

  1. replace,replace_if,replace_copy,及び,replace_copy_if の使用方法です.以下に示すプログラム例において,いくつかのコメント部分は,その上に記述された方法とほぼ同等なものであることを示しています.
    #include <stdio.h>
    #include <vector>
    #include <algorithm>
    
    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>::iterator it;
    					// 初期設定
    	vector<int> v1 {0, 1, 2, 3, 4};
    	printf("v1 :");
    	for (auto x : v1)
    		printf("  %d", x);
    	printf("\n");
    
    					// 2 を 20 で置き換える
    	printf("**v1 の 2 を 20 で置き換える**\n");
    	replace(v1.begin(), v1.end(), 2, 20);
    	printf("  v1 :");
    	for (auto x : v1)
    		printf("  %d", x);
    	printf("\n");
    					// 奇数を 30 で置き換える
    	printf("**v1 の 奇数を 30 で置き換える**\n");
    	replace_if(v1.begin(), v1.end(), is_odd(), 30);   // 単項関数オブジェクト
    //	replace_if(v1.begin(), v1.end(), [](int x){ return x%2 > 0; }, 30);   // ラムダ式
    	printf("  v1 :");
    	for (auto x : v1)
    		printf("  %d", x);
    	printf("\n");
    					// 再初期設定
    	printf("**再初期設定**\n");
    	for (int i1 = 0; i1 < 5; i1++)
    		v1[i1] = i1 + 1;
    	printf("  v1 :");
    	for (auto x : v1)
    		printf("  %d", x);
    	printf("\n");
    
    	vector<int> v2 {10, 20, 30, 40, 50, 60, 70};
    	printf("  v2 :");
    	for (auto x : v2)
    		printf("  %d", x);
    	printf("\n");
    					// 2 を 20 で置き換 v2 にコピー
    	printf("**v1 の 2 を 20 で置き換え v2 にコピー**\n");
    	replace_copy(v1.begin(), v1.end(), v2.begin(), 2, 20);
    	printf("  v1 :");
    	for (auto x : v1)
    		printf("  %d", x);
    	printf("\n");
    	printf("  v2 :");
    	for (auto x : v2)
    		printf("  %d", x);
    	printf("\n");
    					// 奇数を 30 で置き換え v2 にコピー
    	printf("**v1 の 奇数を 30 で置き換え v2 にコピー**\n");
    	replace_copy_if(v1.begin(), v1.end(), v2.begin(), is_odd(), 30);
    //	replace_copy_if(v1.begin(), v1.end(), v2.begin(), [](int x){ return x%2 > 0; }, 30);
    	printf("  v1 :");
    	for (auto x : v1)
    		printf("  %d", x);
    	printf("\n");
    	printf("  v2 :");
    	for (auto x : v2)
    		printf("  %d", x);
    	printf("\n");
    
    	return 0;
    }
    			
    (出力)
    v1 :  0  1  2  3  4
    **v1 の 2 を 20 で置き換える**
      v1 :  0  1  20  3  4
    **v1 の 奇数を 30 で置き換える**
      v1 :  0  30  20  30  4
    **再初期設定**
      v1 :  1  2  3  4  5
      v2 :  10  20  30  40  50  60  70
    **v1 の 2 を 20 で置き換え v2 にコピー**
      v1 :  1  2  3  4  5
      v2 :  1  20  3  4  5  60  70
    **v1 の 奇数を 30 で置き換え v2 にコピー**
      v1 :  1  2  3  4  5
      v2 :  30  2  30  4  30  60  70
    			
[参照]

replace_ifreplace_copyreplace_copy_if

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