Partager via


for_each

Applique un objet spécifié de fonction à chaque élément d'une commande en avant dans une plage et retourne l'objet de fonction.

template<class InputIterator, class Function>
   Function for_each(
      InputIterator _First, 
      InputIterator _Last, 
      Function _Func
   );

Paramètres

  • _First
    Un itérateur d'entrée adressant la position du premier élément dans la plage à fonctionner sur.

  • _Last
    Un itérateur d'entrée adressant une position au delà de le dernier élément dans la plage a opéré sur.

  • _Func
    Objet défini par l'utilisateur de fonction appliqué à chaque élément de la plage.

Valeur de retour

Une copie de l'objet de fonction après qu'il a été appliqué à tous les éléments dans la plage.

Notes

L'algorithme for_each est très flexible, ce qui permet la modification de chaque élément dans une plage dans différentes, spécifiées par l'utilisateur façons.Les fonctions mises en modèle peuvent être réutilisées dans un formulaire modifiée en passant des paramètres.Les fonctions définies par l'utilisateur peuvent accumuler les informations dans un état interne que l'algorithme peut retourner après avoir traité tous les éléments dans la plage.

l'intervalle référencé doit être valide ; tous les pointeurs doivent être deréférençables et, dans la séquence, la dernière position doit être accessible dès le début par l'augmentation.

La complexité est linéaire avec au plus (_Last – _First) des comparaisons.

Exemple

// 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;
}
  
  
  
  

Configuration requise

en-tête : <algorithm>

l'espace de noms : DST

Voir aussi

Référence

for_each (STL Samples)

Modèles Standard