for_each
Wendet ein angegebenes Funktionsobjekt an jedes Element in einem Terminauftrag innerhalb eines Bereichs und gibt dem Funktionsobjekt zurück.
template<class InputIterator, class Function>
Function for_each(
InputIterator _First,
InputIterator _Last,
Function _Func
);
Parameter
_First
Ein Eingabeiterator, der die Position des ersten Elements im Bereich behandelt, ausgeführt gelassen werden._Last
Ein Eingabeiterator, der die Position eine hinter dem letzten Element im Bereich behandelt, arbeitet an._Func
Benutzerdefiniertes Funktionsobjekt, das jedem Element im Bereich angewendet wird.
Rückgabewert
Eine Kopie des Funktionsobjekts, nachdem es auf alle Elemente im Bereich angewendet wurde.
Hinweise
Der Algorithmus for_each ist sehr flexibel und die Änderung der einzelnen Elemente innerhalb eines Bereichs auf die unterschiedlichen, vom Benutzer angegebenen Weise. Auf Vorlagen basierende Funktionen werden in einer geänderten Form wiederverwendet werden, indem verschiedene Parameter übergibt. Benutzerdefinierte Funktionen Akkumulation möglicherweise Informationen innerhalb eines internen Zustands, dem der Algorithmus kann zurückgegeben, nachdem alle Elemente im Bereich verarbeitet hat.
Der Bereich, auf den verwiesen wird, gültig sein; muss alle Zeiger müssen dereferenzierbar sein, und in der Reihenfolge, muss die letzte Position der ersten von Zunahme erreichbar sein.
Die Komplexität ist mit höchstens (_Last- _First) Vergleichen linear.
Beispiel
// alg_for_each.cpp
// compile with: /EHsc
#include <vector>
#include <algorithm>
#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
void operator ( ) ( Type& elem ) const
{
elem *= Factor;
}
};
// The function object to determine the average
class Average
{
private:
long num; // The number of elements
long sum; // The sum of the elements
public:
// Constructor initializes the value to multiply by
Average ( ) : num ( 0 ) , sum ( 0 )
{
}
// The function call to process the next elment
void operator ( ) ( int elem ) \
{
num++; // Increment the element count
sum += elem; // Add the value to the partial sum
}
// return Average
operator double ( )
{
return static_cast <double> (sum) /
static_cast <double> (num);
}
};
int main( )
{
using namespace std;
vector <int> v1;
vector <int>::iterator Iter1;
// 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;
// Using for_each to multiply each element by a Factor
for_each ( v1.begin ( ) , v1.end ( ) , MultValue<int> ( -2 ) );
cout << "Multiplying the elements of the vector v1\n "
<< "by the factor -2 gives:\n v1mod1 = ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")." << endl;
// The function object is templatized and so can be
// used again on the elements with a different Factor
for_each (v1.begin ( ) , v1.end ( ) , MultValue<int> (5 ) );
cout << "Multiplying the elements of the vector v1mod\n "
<< "by the factor 5 gives:\n v1mod2 = ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")." << endl;
// The local state of a function object can accumulate
// information about a sequence of actions that the
// return value can make available, here the Average
double avemod2 = for_each ( v1.begin ( ) , v1.end ( ) ,
Average ( ) );
cout << "The average of the elements of v1 is:\n Average ( v1mod2 ) = "
<< avemod2 << "." << endl;
}
Anforderungen
Header: <algorithm>
Namespace: std