VMS Help
CXXLSTD, Algorithms, replace_if

 *Conan The Librarian

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   replace_if  -	Substitutes elements stored in a collection with new
   values.

 SYNOPSIS

   #include <algorithm>

   template <class ForwardIterator,
 	   class Predicate,
 	   class T>
   void replace_if (ForwardIterator first,
 		  ForwardIterator last,
 		  Predicate pred
 		  const	T& new_value);

 DESCRIPTION

   The replace_if algorithm replaces element referred to	by iterator i
   in the range	[first,	last) with new_value when the following
   condition holds: pred(*i) == true.

 COMPLEXITY

   Exactly last - first applications of the predicate are done.

 EXAMPLE

   //
   // replace.cpp
   //
    #include <algorithm>
    #include <vector>
    #include <iterator>
    #include <iostream.h>

   template<class Arg>
   struct all_true : public unary_function<Arg, bool>
    {
     bool operator()(const Arg&){ return	1; }
    };

   int main()
    {

      //Initialize a vector with	an array of integers
     int	arr[10]	= {1,2,3,4,5,6,7,8,9,10};
     vector<int>	v(arr, arr+10);

      //Print out original vector
     cout << "The original list:	" << endl << "	   ";
     copy(v.begin(),v.end(),ostream_iterator<int,char>(cout," "));
     cout << endl << endl;

      //Replace the number 7 with 11
     replace(v.begin(), v.end(),	7, 11);

      //	Print out vector with 7	replaced,
      //	s.b. 1 2 3 4 5 6 11 8 9	10
     cout << "List after	replace	" << endl << "	   ";
     copy(v.begin(),v.end(),ostream_iterator<int,char>(cout," "));
     cout << endl << endl;

      //Replace 1 2 3 with 13 13	13
      replace_if(v.begin(), v.begin()+3,	all_true<int>(), 13);

      //	Print out the remaining	vector,
      //	s.b. 13	13 13 4	5 6 11 8 9 10
     cout << "List after	replace_if " <<	endl <<	"     ";
     copy(v.begin(),v.end(),ostream_iterator<int,char>(cout," "));
     cout << endl << endl;

     return 0;
    }

   Output :
   The original list:
       1	2 3 4 5	6 7 8 9	10
   List after replace:
       1	2 3 4 5	6 11 8 9 10
   List after replace_if:
       13 13 13 4 5 6 11	8 9 10
   List using replace_copy to cout:
       17 17 17 4 5 6 11	8 9 10
   List with all	elements output	as 19s:
       19 19 19 19 19 19	19 19 19 19

 WARNING

   If your compiler does	not support default template parameters, then
   you need to always supply	the Allocator template argument.  For
   instance,	you will need to write :

   vector<int, allocator<int> >

   instead of :

   vector<int>

 SEE ALSO

   replace, replace_copy, replace_copy_if

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee
  Close     Help