for_each
Applica un oggetto funzione specificata a ogni elemento di un ordine avanti in un intervallo e restituisce l'oggetto funzione.
template<class InputIterator, class Function>
Function for_each(
InputIterator _First,
InputIterator _Last,
Function _Func
);
Parametri
_First
Un iteratore di input destinato alla posizione del primo elemento nell'intervallo da utilizzare._Last
Un iteratore di input destinato alla posizione una dopo l'elemento finale nell'intervallo eseguito su._Func
Oggetto di funzione definita dall'utente che viene applicato a ogni elemento nell'intervallo.
Valore restituito
Una copia dell'oggetto funzione dopo che è stato applicato a tutti gli elementi nell'intervallo.
Note
L'algoritmo for_each è molto flessibile, consentendo la modifica di ogni elemento all'interno di un intervallo in modi differenti e definite dall'utente.Le funzioni di Templatized possono essere riutilizzate in un form modificato passaggio di parametri diversi.Le funzioni definite dall'utente possono accumulare le informazioni di stato interno che l'algoritmo può restituire dopo l'elaborazione tutti gli elementi nell'intervallo.
l'intervallo fatto riferimento deve essere valido; tutti i puntatori devono essere dereferenceable e, nella sequenza, l'ultima posizione sia raggiungibile da prima dall'aumento.
Complessità è lineare con il massimo (_Last –) _Firstconfronti.
Esempio
// 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;
}
Requisiti
intestazione: <algorithm>
Spazio dei nomi: deviazione standard