remove_copy

Copia los elementos de un intervalo de origen a un rango de destino, excepto en que los elementos del valor especificado no se copian, sin perturbar el orden de los elementos restantes y devolver el final de un nuevo intervalo de destino.

template<class InputIterator, class OutputIterator, class Type> 
   OutputIterator remove_copy( 
      InputIterator _First,  
      InputIterator _Last,  
      OutputIterator _Result, 
      const Type& _Val 
   );

Parámetros

  • _First
    Un iterador de entrada que dirige la posición del primer elemento del intervalo de donde se están quitando los elementos.

  • _Last
    Un iterador de entrada que dirige la posición una más allá del último elemento en el intervalo de donde se están quitando los elementos.

  • _Result
    Un iterador de salida que dirige la posición del primer elemento del intervalo de destino al que se están quitando los elementos.

  • _Val
    El valor que debe quitarse del intervalo.

Valor devuelto

Un iterador hacia delante que dirige la nueva posición final del intervalo de destino, una más allá del último elemento de la copia de la secuencia el remanente libre value especificado.

Comentarios

El origen y los rangos de destino hace referencia deben ser válidos; todos los punteros deben ser dereferenceable y dentro de la secuencia la posición última es accesible de primera por el aumento.

Debe haber suficiente espacio en el rango de destino para contener los elementos del remanente que se copiarán después de que los elementos de valor especificado se eliminan.

El orden de los elementos no colocados permanece estable.

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

La complejidad es lineal; hay (_Last – _First) comparaciones de igualdad y como máximo (_Last – _First) las asignaciones.

remove_copy tiene dos formatos relacionados:

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

Ejemplo

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

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 of 7
   new_end = remove_copy ( v1.begin( ), v1.end( ), v2.begin( ), 7 );

   cout << "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 the value 7 removed:\n ( " ;
   for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; Iter2++ )
      cout << *Iter2 << " ";
   cout << ")." << endl;
}

Resultados del ejemplo

The original vector v1 is:     ( 7 1 9 2 0 7 7 3 4 6 8 5 7 7 ).
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 the value 7 removed:
 ( 1 9 2 0 3 4 6 8 5 0 ).

Requisitos

Encabezado: <algorithm>

Espacio de nombres: std

Vea también

Referencia

remove_copy (Ejemplos de STL)

Biblioteca de plantillas estándar