Freigeben über


replace_if

Überprüft jedes Element in einem Bereich und ersetzt, sofern ein angegebenes Prädikat erfüllt.

template<class ForwardIterator, class Predicate, class Type>
   void replace_if(
      ForwardIterator _First, 
      ForwardIterator _Last,
      Predicate _Pred, 
      const Type& _Val
   );

Parameter

  • _First
    Ein Vorwärtsiterator, der die Position des ersten Elements im Bereich zeigt, von dem Elemente ersetzt werden.

  • _Last
    Ein Iterator, der zur Position eine hinter dem letzten Element im Bereich zeigt, von dem Elemente ersetzt werden.

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

  • _Val
    Der neue Wert, der den Elementen zugewiesen wird, deren alter Wert das Prädikat erfüllt.

Hinweise

Der Bereich, der verweist, muss gültig sein; alle Zeiger müssen dereferenzierbar sein und in der Sequenz ist die letzte Position von der ersten durch Zunahme erreichbar.

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

Der Algorithmus replace_if ist eine Verallgemeinerung des Algorithmus replace und ermöglicht jedes, anstatt Gleichheit zu einem angegebenen konstanten Wert angegeben werden Prädikat.

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 von neuen Werten.

Beispiel

// alg_replace_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;
   vector <int>::iterator Iter1;

   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:\n ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")." << endl;

   // Replace elements satisfying the predicate greater6
   // with a value of 70
   replace_if ( v1.begin( ), v1.end( ), greater6 , 70);

   cout << "The vector v1 with a value 70 replacing those\n "
        << "elements satisfying the greater6 predicate is:\n ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")." << endl;
}

Beispielausgabe

The original vector v1 is:
 ( 7 1 9 2 0 7 7 3 4 6 8 5 7 7 ).
The vector v1 with a value 70 replacing those
 elements satisfying the greater6 predicate is:
 ( 70 1 70 2 0 70 70 3 4 6 70 5 70 70 ).

Anforderungen

Header: <algorithm>

Namespace: std

Siehe auch

Referenz

replace_if (STL Samples)

Standardvorlagenbibliothek