Freigeben über


remove_copy_if

Kopiert Elemente aus einem Quellbereich zu einem Zielbereich, außer dass, ein Prädikat zufrieden stellend, werden kopiert, nicht, ohne die Reihenfolge der verbleibenden Elemente zu beeinträchtigen und das Ende eines neuen Zielbereichs zurückzugeben.

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

Parameter

  • _First
    Ein Eingabeiterator, der die Position des ersten Elements im Bereich abweicht, von dem Elemente entfernt werden.

  • _Last
    Ein Eingabeiterator, der die Position eine hinter dem letzten Element im Bereich abweicht, von dem Elemente entfernt werden.

  • _Result
    Ein Ausgabeiterator, der die Position des ersten Elements im Zielbereich abweicht, zu dem Elemente entfernt werden.

  • _Pred
    Das unäre Prädikat, das erfüllt sein muss, ist der Wert eines Elements ersetzt werden soll.

Rückgabewert

Ein Vorwärtsiterator, der die neue Endposition des Zielbereichs, eine hinter dem letzten Element der Restsequenz frei von Elementen entsprechen das Prädikat behandelt.

Hinweise

Der Quellbereich, auf den verwiesen wird, muss gültig sein; alle Zeiger müssen dereferenzierbar sein und in der Sequenz ist die letzte Position von der ersten durch Zunahme erreichbar.

Es muss ausreichend Speicherplatz im Zielbereich geben, um die Restelemente enthalten soll, die kopiert werden, nachdem Elemente des angegebenen Werts entfernt wurden.

Die Reihenfolge der Elemente, die nicht entfernt werden, bleibt stabil.

operator==, das verwendet wird, um die Gleichheit zwischen Elementen zu bestimmen, muss eine Äquivalenzrelation zwischen den Operanden verlangen.

Die Komplexität kann linear: Es gibt _Last (-) _First Vergleiche auf Gleichheit und höchstens (_Last - _First Zuweisungen).

remove_copy_if hat zwei verknüpfte Formulare:

Informationen darüber, wie diese Funktionen verhalten, finden Sie unter Überprüfte Iteratoren.

Beispiel

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

Beispielausgabe

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

Anforderungen

Header: <algorithm>

Namespace: std

Siehe auch

Referenz

remove_copy_if (STL Samples)

Standardvorlagenbibliothek