Compartir a través de


remove_if

Elimina los elementos que cumplen un predicado de un intervalo determinado sin perturbar el orden de los elementos restantes y devolver el final de un nuevo intervalo libre value especificado.

template<class ForwardIterator, class Predicate>
   ForwardIterator remove_if(
      ForwardIterator _First, 
      ForwardIterator _Last,
      Predicate _Pred
   );

Parámetros

  • _First
    Un iterador hacia delante que apunta a la posición del primer elemento del intervalo de donde se están quitando los elementos.

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

  • _Pred
    El predicado unario que debe ser cumplido es el valor de un elemento debe reemplazarse.

Valor devuelto

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

Comentarios

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

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.

La lista hace que una versión más eficaz de funciones miembro de quite que vuelve a vincular punteros.

Ejemplo

// alg_remove_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;
   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 << "Vector v1 is ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")." << endl;

   // Remove elements satisfying predicate greater6
   new_end = remove_if (v1.begin( ), v1.end( ), greater6 );

   cout << "Vector v1 with elements satisfying greater6 removed is\n ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")." << endl;

   // To change the sequence size, use erase
   v1.erase (new_end, v1.end( ) );

   cout << "Vector v1 resized elements satisfying greater6 removed is\n ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")." << endl;
}

Resultados del ejemplo

Vector v1 is ( 7 1 9 2 0 7 7 3 4 6 8 5 7 7 ).
Vector v1 with elements satisfying greater6 removed is
 ( 1 2 0 3 4 6 5 3 4 6 8 5 7 7 ).
Vector v1 resized elements satisfying greater6 removed is
 ( 1 2 0 3 4 6 5 ).

Requisitos

encabezado: <algoritmo>

espacio de nombres: std

Vea también

Referencia

remove_if (STL Samples)

Biblioteca de plantillas estándar