Freigeben über


replace_copy

Überprüft jedes Element in einem Quellbereich und ersetzt, sofern einen angegebenen Wert beim Kopieren des Ergebnisses in einen neuen Zielbereich entspricht.

template<class InputIterator, class OutputIterator, class Type>
   OutputIterator replace_copy(
      InputIterator _First, 
      InputIterator _Last, 
      OutputIterator _Result,
      const Type& _OldVal, 
      const Type& _NewVal
   );

Parameter

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

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

  • _Result
    Ein Ausgabeiterator, der auf das erste Element im Zielbereich die zeigt, dem die geänderte Sequenz von Elementen kopiert wird.

  • _OldVal
    Der alte Wert der Elemente, die ersetzt werden.

  • _NewVal
    Der neue Wert, der den Elementen mit dem alten Wert zugewiesen wird.

Rückgabewert

Ein Ausgabeiterator, der zur Position eine hinter dem letzten Element im Zielbereich die zeigt, der die geänderte Sequenz von Elementen kopiert wird.

Hinweise

Die Quelle und die Zielbereiche, auf die verwiesen wird, dürfen sich nicht überschneiden und müssen beide gültig sein: alle Zeiger müssen dereferenzierbar sein und innerhalb der Sequenzen ist die letzte Position von der ersten durch Zunahme erreichbar.

Die Reihenfolge der Elemente, die nicht ersetzt 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 von neuen Werten.

replace_copy hat zwei verknüpfte Formulare:

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

Beispiel

// alg_replace_copy.cpp
// compile with: /EHsc
#include <vector>
#include <list>
#include <algorithm>
#include <iostream>

int main( ) {
   using namespace std;
   vector <int> v1;
   list <int> L1 (15);
   vector <int>::iterator Iter1;
   list <int>::iterator L_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( ) );

   int iii;
   for ( iii = 0 ; iii <= 15 ; iii++ )
      v1.push_back( 1 );

   cout << "The original vector v1 is:\n ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")." << endl;

   // Replace elements in one part of a vector with a value of 7
   // with a value of 70 and copy into another part of the vector
   replace_copy ( v1.begin( ), v1.begin( ) + 14,v1.end( ) -15, 7 , 70);

   cout << "The vector v1 with a value 70 replacing that of 7 is:\n ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")." << endl;

   // Replace elements in a vector with a value of 70
   // with a value of 1 and copy into a list
   replace_copy ( v1.begin( ), v1.begin( ) + 14,L1.begin( ), 7 , 1);

   cout << "The list copy L1 of v1 with the value 0 replacing "
        << "that of 7 is:\n ( " ;
   for ( L_Iter1 = L1.begin( ) ; L_Iter1 != L1.end( ) ; L_Iter1++ )
      cout << *L_Iter1 << " ";
   cout << ")." << endl;
}

Beispielausgabe

The original vector v1 is:
 ( 7 1 9 2 0 7 7 3 4 6 8 5 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ).
The vector v1 with a value 70 replacing that of 7 is:
 ( 7 1 9 2 0 7 7 3 4 6 8 5 7 7 1 70 1 9 2 0 70 70 3 4 6 8 5 70 70 1 ).
The list copy L1 of v1 with the value 0 replacing that of 7 is:
 ( 1 1 9 2 0 1 1 3 4 6 8 5 1 1 0 ).

Anforderungen

Header: <algorithm>

Namespace: std

Siehe auch

Referenz

replace_copy (STL Samples)

Standardvorlagenbibliothek