Freigeben über


transform

Wendet einen angegebenen Funktionsobjekt an jedes Element in einem Quellbereich oder einem Paar von Elementen aus 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 abweicht, ausgeführt gelassen werden.

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

  • _First2
    Ein Eingabeiterator, der die Position des ersten Elements im zweiten Quellbereich abweicht, 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 die beiden Quellbereichen auf paarweise ist.

Rückgabewert

Ein Ausgabeiterator, der die Position eine hinter dem letzten Element im Zielbereich abweicht, 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 sein und innerhalb jeder Sequenz muss die letzte Position von der ersten durch Zunahme erreichbar sein.Der Zielbereich muss groß genug sein, den transformierten Quellbereich zu enthalten.

Wenn _Result gleich _First1 in der ersten Version des Algorithmus festgelegt ist , dann sind die Quelle und die Zielbereiche die gleiche - Sequenz wird an der Stelle geändert.Die _Result behandelt 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