Espacios de nombres
Variantes
Acciones

std::replace_copy, std::replace_copy_if

De cppreference.com
< cpp‎ | algorithm

 
 
Biblioteca de algoritmos
Políticas de ejecución (C++17)
Operaciones no modificadoras de secuencia
(C++11)(C++11)(C++11)
(C++17)
Operaciones modificadoras de secuencia
Operaciones en almacenamiento no inicializado
Operaciones de partición
Operaciones de ordenación
(C++11)
Operaciones de búsqueda binaria
Operaciones de set (en rangos ordenados)
Operaciones de pila
(C++11)
Operaciones minimo/maximo
(C++11)
(C++17)
Permutaciones
Operaciones numéricas
Bibliotecas C
 
Definido en la cabecera <algorithm>
template< class InputIt, class OutputIt, class T >

OutputIt replace_copy( InputIt first, InputIt last, OutputIt d_first,

                       const T& old_value, const T& new_value );
(1)
template< class InputIt, class OutputIt, class UnaryPredicate, class T >

OutputIt replace_copy_if( InputIt first, InputIt last, OutputIt d_first,

                          UnaryPredicate p, const T& new_value );
(2)

Copies the all elements from the range [first, last) to another range beginning at d_first replacing all elements satisfying specific criteria with new_value. The first version replaces the elements that are equal to old_value, the second version replaces elements for which predicate p returns true. The source and destination ranges cannot overlap.

Contenido

[editar] Parámetros

first, last -
la gama de elementos a copiar
Original:
the range of elements to copy
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
d_first -
el comienzo del rango de destino
Original:
the beginning of the destination range
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
old_value -
el valor de los elementos a sustituir
Original:
the value of elements to replace
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
p - predicado unario que devuelve ​true
si el valor del elemento debe ser reemplazado
Original:
if the element value should be replaced
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
.

La firma de la función predicado debe ser equivalente a:

 bool pred(const Type &a);

La forma no necesita tener const &, pero la función no debe modificar el objeto que ha sido pasado.
El tipo Type debe ser tal que un objeto del tipo InputIt puede ser derreferenciado y entonces convertido implícitamente a Type. ​

new_value -
el valor a usar como reemplazo
Original:
the value to use as replacement
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Requerimientos de tipo
-
InputIt debe reunir los requerimientos de InputIterator.
-
OutputIt debe reunir los requerimientos de OutputIterator.

[editar] Valor de retorno

Iterator al elemento pasado el último elemento copiado .
Original:
Iterator to the element past the last element copied.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

[editar] Complejidad

Exactamente last - first aplicaciones del predicado .
Original:
Exactly last - first applications of the predicate.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

[editar] Posible implementación

Primera versión
template<class InputIt, class OutputIt, class T>
OutputIt replace_copy(InputIt first, InputIt last, OutputIt d_first,
                      const T& old_value, const T& new_value)
{
    for (; first != last; ++first) {
        *d_first++ = (*first == old_value) ? new_value : *first;
    }
    return d_first;
}
Segunda versión
template<class InputIt, class OutputIt, 
         class UnaryPredicate, class T>
OutputIt replace_copy_if(InputIt first, InputIt last, OutputIt d_first,
                         UnaryPredicate p, const T& new_value)
{
    for (; first != last; ++first) {
        *d_first++ = (p( *first ) ? new_value : *first;
    }
    return d_first;
}

[editar] Ejemplo

The following copy prints a vector, replacing all values over 5 with 99 on the fly.

#include <algorithm>
#include <vector>
#include <iostream>
#include <iterator>
#include <functional>
 
int main()
{
    std::vector<int> v{5, 7, 4, 2, 8, 6, 1, 9, 0, 3};
    std::replace_copy_if(v.begin(), v.end(),
                         std::ostream_iterator<int>(std::cout, " "),
                         [](int n){return n > 5;}, 99);
    std::cout << '\n';
}

Salida:

5 99 4 2 99 99 1 99 0 3

[editar] Ver también

elimina elementos que cumplan criterios específicos
Original:
removes elements satisfying specific criteria
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(plantilla de función) [editar]