VMS Help
CXXLSTD, Algorithms, replace_copy

 *Conan The Librarian

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

 NAME

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

 SYNOPSIS

   #include <algorithm>

   template <class InputIterator,
 	   class OutputIterator,
 	   class T>
   OutputIterator replace_copy (InputIterator first,
 			      InputIterator last,
 			      OutputIterator result,
 			      const T& old_value,
 			      const T& new_value);

 DESCRIPTION

   The replace_copy algorithm leaves the	original sequence intact and
   places the revised sequence into result. The	algorithm compares
   elements referred to by	iterator i in the range	[first,	last)
   with old_value.  If *i does not equal	old_value, then	the
   replace_copy copies	*i to result+(first-i).	 If *i==old_value,
   then replace_copy copies new_value to result+(first-i). replace_copy
   returns result+(last-first).

 COMPLEXITY

   Exactly last - first	comparisons between values 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+0, 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.
      //
     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.
      //
     cout << "List after	replace_if:" <<	endl <<	"     ";
     copy(v.begin(), v.end(), ostream_iterator<int,char>(cout," "));
     cout << endl << endl;
      //
      //	Replace	those 13s with 17s on output.
      //
     cout << "List using	replace_copy to	cout:" << endl << "	";
      replace_copy(v.begin(), v.end(),
 		     ostream_iterator<int,char>(cout, "	"), 13,	17);
     cout << endl << endl;
      //
      //	A simple example of replace_copy_if.
      //
     cout << "List w/ all elements output as 19s:" << endl << "	 ";
     replace_copy_if(v.begin(), v.end(),
 		       ostream_iterator<int,char>(cout,	" "),
 		    all_true<int>(), 19);
     cout << 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_if, replace_copy_if

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