Freigeben über


transform

Wendet ein angegebenes Funktionsobjekt an jedes Element in einem Quellbereich oder einem Paar Elemente von zwei Quellbereichen und kopiert die Rückgabewerte des Funktionsobjekts in einen Zielbereich.

template<class InputIterator, class OutputIterator, class UnaryFunction> 
   OutputIterator transform( 
      InputIterator _First1,  
      InputIterator _Last1,  
      OutputIterator _Result, 
      UnaryFunction _Func 
   ); 
template<class InputIterator1, class InputIterator2, class OutputIterator, 
   class BinaryFunction> 
   OutputIterator transform( 
      InputIterator1 _First1,  
      InputIterator1 _Last1, 
      InputIterator2 _First2,  
      OutputIterator _Result, 
      BinaryFunction _Func 
   );

Parameter

  • _First1
    Ein Eingabeiterator, der die Position des ersten Elements im ersten Quellbereich behandelt, ausgeführt gelassen werden.

  • _Last1
    Ein Eingabeiterator, der die Position eine hinter dem letzten Element im ersten Quellbereich anspricht, arbeitet an.

  • _First2
    Ein Eingabeiterator, der die Position des ersten Elements im zweiten Quellbereich behandelt, ausgeführt gelassen werden.

  • _Result
    Ein Ausgabeiterator, der die Position des ersten Elements im Zielbereich behandelt.

  • _Func
    Benutzerdefiniertes unäres Funktionsobjekt verwendet in der ersten Version des Algorithmus, der auf jedes Element im ersten Quellbereich oder benutzerdefinierten (UD) dem binären Funktionsobjekt A angewendet wird, die in der zweiten Version des Algorithmus verwendet werden, der in einem Terminauftrag, auf den zwei Quellbereichen auf paarweises ist.

Rückgabewert

Ein Ausgabeiterator, der die Position eine hinter dem letzten Element im Zielbereich anspricht, der die Ausgabeelemente empfängt, Transformation vom Funktionsobjekt.

Hinweise

Die Bereiche, auf die verwiesen wird, müssen gültig sein; alle Zeiger müssen dereferenzierbar befinden jeder Sequenz muss die letzte Position der ersten von Zunahme erreichbar sein. Der Zielbereich muss groß genug sein, den umgewandelten Quellbereich zu enthalten.

Wenn _Result gleich _First1 in der ersten Version des Algorithmus festgelegt ist , dann sind die Quelle und die Zielbereiche identisch und die Sequenz wird an der Stelle geändert. Die _Result bezieht möglicherweise keine Position innerhalb des Bereichs [_First1 +1, _Last1).

Die Komplexität ist mit höchstens (_Last1- _First1) Vergleichen linear.

Beispiel

// alg_transform.cpp
// compile with: /EHsc
#include <vector>
#include <algorithm>
#include <functional>
#include <iostream>

// The function object multiplies an element by a Factor
template <class Type>
class MultValue
{
   private:
      Type Factor;   // The value to multiply by
   public:
      // Constructor initializes the value to multiply by
      MultValue ( const Type& _Val ) : Factor ( _Val ) {
      }

      // The function call for the element to be multiplied
      Type operator ( ) ( Type& elem ) const 
      {
         return elem * Factor;
      }
};

int main( )
{
   using namespace std;
   vector <int> v1, v2 ( 7 ), v3 ( 7 );
   vector <int>::iterator Iter1, Iter2 , Iter3;

   // Constructing vector v1
   int i;
   for ( i = -4 ; i <= 2 ; i++ )
   {
      v1.push_back(  i );
   }

   cout << "Original vector  v1 = ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")." << endl;

   // Modifying the vector v1 in place
   transform (v1.begin ( ) , v1.end ( ) , v1.begin ( ) , MultValue<int> ( 2 ) );
   cout << "The elements of the vector v1 multiplied by 2 in place gives:"
        << "\n v1mod = ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")." << endl;

   // Using transform to multiply each element by a factor of 5
   transform ( v1.begin ( ) , v1.end ( ) , v2.begin ( ) , MultValue<int> ( 5 ) );
   
   cout << "Multiplying the elements of the vector v1mod\n "
        <<  "by the factor 5 & copying to v2 gives:\n v2 = ( " ;
   for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; Iter2++ )
      cout << *Iter2 << " ";
   cout << ")." << endl;

   // The second version of transform used to multiply the 
   // elements of the vectors v1mod & v2 pairwise
   transform ( v1.begin ( ) , v1.end ( ) ,  v2.begin ( ) , v3.begin ( ) , 
      multiplies <int> ( ) );
   
   cout << "Multiplying elements of the vectors v1mod and v2 pairwise "
        <<  "gives:\n v3 = ( " ;
   for ( Iter3 = v3.begin( ) ; Iter3 != v3.end( ) ; Iter3++ )
      cout << *Iter3 << " ";
   cout << ")." << endl;
}
  

Anforderungen

Header: <algorithm>

Namespace: std

Siehe auch

Referenz

Standardvorlagenbibliothek