Compartilhar via


for_each

Aplica um objeto especificado da função a cada elemento em uma ordem para dentro de um intervalo e retorna o objeto de função.

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

Parâmetros

  • _First
    Um iterador de entrada que trata a posição do primeiro elemento no intervalo ser operado em.

  • _Last
    Um iterador de entrada que trata a posição uma depois do elemento final no intervalo operado.

  • _Func
    Objeto de função definida pelo usuário que é aplicado a cada elemento no intervalo.

Valor de retorno

Uma cópia do objeto da função depois que foi aplicado a todos os elementos no intervalo.

Comentários

O algoritmo for_each é bem flexível, permitindo a alteração de cada elemento dentro de um intervalo de maneiras diferentes, especificadas pelo usuário. As funções de Templatized podem ser reutilizadas em um formato modificado passando parâmetros diferentes. As funções definidas pelo usuário podem coletem informações em um estado interno que o algoritmo possa retornar depois de processado todos os elementos no intervalo.

O intervalo referenciado deve ser válido; todos os ponteiros devem ser dereferenceable e, na sequência, a posição da última deve ser possível acessá-lo do pela primeira incrementação.

A complexidade é linear com no máximo_Last (–)_Firstcomparações.

Exemplo

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

Requisitos

Cabeçalho: <algoritmo>

Namespace: std

Consulte também

Referência

for_each (Exemplos da STL)

Biblioteca de Modelos Padrão