◐ Shell
clean mode source ↗

std::replace_copy, std::replace_copy_if - cppreference.com

De cppreference.com

Esta página se ha traducido por ordenador/computador/computadora de la versión en inglés de la Wiki usando Google Translate.

La traducción puede contener errores y palabras aparatosas/incorrectas. Planea sobre el texto para ver la versión original. Puedes ayudar a corregir los errores y mejorar la traducción. Para instrucciones haz clic aquí.

Definido en el archivo de encabezado <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.

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 expresión p(v) debe ser convertible a bool para cada argumento v de tipo (posiblemente const) VT, donde VT es el tipo valor de InputIt, independientemente de la categoría de valor, y no debe modificar v. Por lo tanto, no se admite un parámetro de tipo VT&, ni es VT a menos que para VT una operación de movimiento sea equivalente a una copia (desde C++11). ​

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.

Requisitos de tipo
-InputIt debe reunir los requerimientos de InputIterator.
-OutputIt debe reunir los requerimientos de OutputIterator.

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.

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.

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;
}

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:

Ver también