Para ver el artículo en inglés, active la casilla Inglés. También puede ver el texto en inglés en una ventana emergente si pasa el puntero del mouse por el texto.
Traducción
Inglés
Se recomienda usar Visual Studio 2017

remove_copy_if

 

Publicada: junio de 2016

Copia elementos de un intervalo de origen a un intervalo de destino, excepto que los elementos que satisfacen un predicado no se copian, sin alterar el orden de los elementos restantes y devolver el final de un nuevo intervalo de destino.


template<class InputIterator, class OutputIterator, class Predicate>
   OutputIterator remove_copy_if(
      InputIterator 
_First
, 
      InputIterator 
_Last
, 
      OutputIterator 
_Result
,
      Predicate 
_Pred
   );

_First

Iterador de entrada que direcciona la posición del primer elemento del intervalo del que se quitan los elementos.

_Last

Iterador de entrada que direcciona la posición situada una posición después del elemento final del intervalo del que se quitan los elementos.

_Result

Iterador de salida que direcciona la posición del primer elemento del intervalo de destino del que se quitan los elementos.

_Pred

El predicado unario que debe cumplirse es el valor de un elemento que se va a reemplazar.

Iterador hacia delante que direcciona la nueva posición final del intervalo de destino, situada una posición después del elemento final de la secuencia restante sin los elementos que cumplen el predicado.

El intervalo de origen al que se hace referencia debe ser válido; todos los punteros se deben poder desreferenciar y, dentro de la secuencia, se debe poder llegar a la última posición desde la primera mediante incrementos.

Debe haber suficiente espacio en el intervalo de destino para incluir los elementos restantes que se copiarán después de quitar elementos del valor especificado.

El orden de los elementos no quitados no se ve afectado.

El operator== utilizado para determinar la igualdad entre elementos debe imponer una relación de equivalencia entre sus operandos.

La complejidad es lineal: hay (_Last – _First) comparaciones para igualdad y, a lo sumo, (_Last – _First) asignaciones.

remove_copy_if tiene dos formatos relacionados:

  • checked_remove_copy_if

  • unchecked_remove_copy_if

Para obtener más información sobre el comportamiento de estas funciones, vea Iteradores activados.

Ejemplo

// alg_remove_copy_if.cpp
// compile with: /EHsc
#include <vector>
#include <algorithm>
#include <iostream>

bool greater6 ( int value ) {
   return value >6;
}

int main() {
   using namespace std;
   vector <int> v1, v2(10);
   vector <int>::iterator Iter1, Iter2, new_end;

   int i;
   for ( i = 0 ; i <= 9 ; i++ )
      v1.push_back( i );

   int ii;
   for ( ii = 0 ; ii <= 3 ; ii++ )
      v1.push_back( 7 );

   random_shuffle ( v1.begin( ), v1.end( ) );
   cout << "The original vector v1 is:      ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")." << endl;

   // Remove elements with a value greater than 6
   new_end = remove_copy_if ( v1.begin( ), v1.end( ), 
      v2.begin( ), greater6 );

   cout << "After the appliation of remove_copy_if to v1,\n "
        << "vector v1 is left unchanged as ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")." << endl;

   cout << "Vector v2 is a copy of v1 with values greater "
        << "than 6 removed:\n ( " ;
   for ( Iter2 = v2.begin( ) ; Iter2 != new_end ; Iter2++ )
      cout << *Iter2 << " ";
   cout << ")." << endl;
}

The original vector v1 is:      ( 7 1 9 2 0 7 7 3 4 6 8 5 7 7 ).
After the appliation of remove_copy_if to v1,
 vector v1 is left unchanged as ( 7 1 9 2 0 7 7 3 4 6 8 5 7 7 ).
Vector v2 is a copy of v1 with values greater than 6 removed:
 ( 1 2 0 3 4 6 5 ).

Requisitos

Encabezado: <algorithm>

Espacio de nombres: std

Mostrar: