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