Sdílet prostřednictvím


remove_copy_if

Kopie prvky ze zdrojové oblasti na místo určení rozsahu, s výjimkou splňující predikát nejsou zkopírovány bez narušení pořadí zbývající prvky a vrácení konec nové cílové oblasti.

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

Parametry

  • _First
    Vstupní iterátor adresování umístění první prvek v oblasti, ze které jsou odebírány prvky.

  • _Last
    Vstupní iterátor adresování jednu pozici za poslední prvek v oblasti, ze které jsou odebírány prvky.

  • _Result
    Výstupní iterace adresování umístění první prvek v cílové oblasti, do které budou odebrány elementy.

  • _Pred
    Unárního predikátu, která musí být splněna je hodnota prvku, které mají být nahrazeny.

Vrácená hodnota

Vpřed iterace adresování nový konec pozice cílové oblasti, jeden za poslední prvek sekvence zbývajících volných prvků, které splňují predikátu.

Poznámky

Odkazované zdrojové oblasti musí být platná. všechny ukazatele musí být dereferenceable a v pořadí je dostupná z první na poslední pozici ve incrementation.

Cílová oblast obsahuje zbývajících prvků, které budou zkopírovány po odebrání prvků zadané hodnoty musí být dostatek místa.

Pořadí prvků neodebrané zůstává stabilní.

operator== Slouží k určení rovnosti mezi prvky musí stanovit vztah rovnocennosti mezi jeho operandy.

Složitost je lineární: existují (_Last - _First) porovnání rovnosti a maximálně (_Last – _First) přiřazení.

remove_copy_if má dva související formuláře:

Informace o chování těchto funkcí naleznete v tématu Checked – iterátory.

Příklad

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

Výstup ukázky

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

Požadavky

Záhlaví: <algoritmus>

Obor názvů: std

Viz také

Referenční dokumentace

remove_copy_if (ukázky STL)

Standardní knihovna šablon