remove_copy_if

Copia di elementi da un intervallo di origine in un intervallo di destinazione, ma la presenza di un predicato non vengono copiati, senza pregiudicare l'ordine degli elementi rimanenti e restituire la fine del nuovo intervallo di destinazione.

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

Parametri

  • _First
    Un iteratore di input destinato alla posizione del primo elemento nell'intervallo da cui gli elementi vengono rimuovere.

  • _Last
    Un iteratore di input destinato alla posizione una dopo l'elemento finale nell'intervallo da cui gli elementi vengono rimuovere.

  • _Result
    Un iteratore di output destinato alla posizione del primo elemento nell'intervallo di destinazione in cui gli elementi vengono rimuovere.

  • _Pred
    Il predicato unario che deve essere soddisfatta rappresenta il valore di un elemento deve essere inserito.

Valore restituito

Un iteratore avanti destinato a esente la nuova posizione finale dell'intervallo di destinazione, una dopo l'elemento finale della sequenza del resto da elementi che soddisfano il predicato.

Note

L'intervallo di origine a cui viene fatto riferimento deve essere valido; tutti i puntatori devono essere dereferenceable e all'interno della sequenza dell'ultima posizione è raggiungibile da prima dall'aumento.

Deve essere sufficientemente spazio nell'intervallo di destinazione per contenere gli elementi del resto che verranno copiati dopo che gli elementi del valore specificato vengono rimossi.

L'ordine degli elementi eliminati non rimane invariata.

operator== utilizzato per determinare l'uguaglianza tra elementi necessario imporre una relazione di equivalenza fra i propri operandi.

Complessità è lineare: esistono_Last (–) _Firstconfronti di uguaglianza e al massimo (_Last –) _Firstassegnazioni.

remove_copy_if dispone di due form correlati:

Per informazioni su come queste funzioni si comportano, vedere Iteratori verificati.

Esempio

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

Esempio di output

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 ).

Requisiti

intestazione: <algorithm>

Spazio dei nomi: deviazione standard

Vedere anche

Riferimenti

remove_copy_if (STL Samples)

Libreria di modelli standard