Udostępnij za pośrednictwem


remove_copy_if

Kopie elementów z zakresu źródła do miejsca docelowego, w zakresie, chyba że spełniające predykatu nie są kopiowane, bez naruszania zamówienia pozostałe elementy i zwracanie koniec nowego zakresu docelowego.

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

Parametry

  • _First
    Wejściowy sterująca adresowania położenie pierwszego elementu w zakresie, z którego elementy są usuwane.

  • _Last
    Wejściowy sterująca adresowania pozycji, jeden obok ostatniego elementu w zakresie, z którego elementy są usuwane.

  • _Result
    Dane wyjściowe iterację adresowania położenie pierwszego elementu w zakresie docelowym, do którego elementy są usuwane.

  • _Pred
    Wartość elementu jest wymieniana jest predykatu jednoelementowego, które muszą być spełnione.

Wartość zwracana

Do przodu sterująca, adresowania nowe położenie końca zakresu docelowego, jeden przeszłości końcowy element sekwencji pozostałość wolne od elementy spełniające predykatu.

Uwagi

Odwołanie do zakres źródłowy musi być prawidłowy; wszystkie wskaźniki muszą być dereferenceable i w sekwencji ostatniej pozycji jest dostępny z pierwszym przez incrementation.

Zakres docelowy zawierają elementy pozostałość, które zostaną skopiowane, po usunięciu elementy o określonej wartości musi być wystarczająca ilość miejsca.

Kolejność elementów nie usunięte pozostaje stabilny.

operator== Używana do określenia równości między elementami musi nakładać relacja równoważności między argumentów.

Złożoność jest liniowa: istnieją (_Last - _First) porównań równości i co najwyżej (_Last - _First) przydziałów.

remove_copy_if ma dwa powiązane formularze:

Aby uzyskać informacje o zachowaniu tych funkcji, zobacz Zaznaczone iteratory.

Przykład

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

Przykładowe dane wyjściowe

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

Wymagania

Nagłówek: <algorytm>

Przestrzeń nazw: std

Zobacz też

Informacje

remove_copy_if (STL — Przykłady)

Standardowa biblioteka szablonów