.. Algorithms/Transformation Algorithms//replace |40

.. Copyright Aleksey Gurtovoy, David Abrahams 2007.
.. Distributed under the Boost
.. Software License, Version 1.0. (See accompanying
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

replace
=======

Synopsis
--------

.. parsed-literal::
    
    template<
          typename Sequence
        , typename OldType
        , typename NewType
        , typename In = |unspecified|
        >
    struct replace
    {
        typedef |unspecified| type;
    };



Description
-----------

Returns a copy of the original sequence where every type identical to ``OldType`` 
has been replaced with ``NewType``. 

|transformation algorithm disclaimer|

Header
------

.. parsed-literal::
    
    #include <boost/mpl/replace.hpp>


Model of
--------

|Reversible Algorithm|


Parameters
----------

+---------------+-----------------------------------+-------------------------------+
| Parameter     | Requirement                       | Description                   |
+===============+===================================+===============================+
| ``Sequence``  | |Forward Sequence|                | A original sequence.          |
+---------------+-----------------------------------+-------------------------------+
| ``OldType``   | Any type                          | A type to be replaced.        |
+---------------+-----------------------------------+-------------------------------+
| ``NewType``   | Any type                          | A type to replace with.       |
+---------------+-----------------------------------+-------------------------------+
| ``In``        | |Inserter|                        | An inserter.                  |
+---------------+-----------------------------------+-------------------------------+


Expression semantics
--------------------

|Semantics disclaimer...| |Reversible Algorithm|.

For any |Forward Sequence| ``s``, an |Inserter| ``in``, and arbitrary types ``x`` and ``y``:


.. parsed-literal::

    typedef replace<s,x,y,in>::type r; 

:Return type:
    A type.
 
:Semantics:
    Equivalent to 

    .. parsed-literal::
    
        typedef replace_if< s,y,is_same<_,x>,in >::type r; 


Complexity
----------

Linear. Performs exactly ``size<s>::value`` comparisons for 
identity / insertions.


Example
-------

.. parsed-literal::
    
    typedef vector<int,float,char,float,float,double> types;
    typedef vector<int,double,char,double,double,double> expected;
    typedef replace< types,float,double >::type result;
    
    BOOST_MPL_ASSERT(( equal< result,expected > ));


See also
--------

|Transformation Algorithms|, |Reversible Algorithm|, |reverse_replace|, |replace_if|, |remove|, |transform|
