Freigeben über


for_each

Wendet einen angegebenen Funktionsobjekt an jedes Element in einem Terminauftrag innerhalb eines Bereichs und gibt das 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 abweicht, ausgeführt gelassen werden.

  • _Last
    Ein Eingabeiterator, der die Position eine hinter dem letzten Element im Bereich abweicht, arbeitet an.

  • _Func
    Benutzerdefiniertes Funktionsobjekt, die jedem Element im Bereich angewendet wird.

Rückgabewert

Eine Kopie des Funktionsobjekts, nachdem es allen Elementen im Bereich angewendet wurde.

Hinweise

Der Algorithmus for_each ist sehr flexibel und ermöglicht die Änderung jedes Elements innerhalb eines Bereichs auf die verschiedenen, vom Benutzer angegebenen Weise.Auf Vorlagen basierende Funktionen werden in Form einer geänderten wiederverwendet werden, indem Sie verschiedene - Parameter übergeben.Benutzerdefinierte Funktionen veranschaulicht beispielsweise Informationen innerhalb eines internen Zustand, den der Algorithmus möglicherweise zurückgibt, nachdem er alle Elemente im Bereich verarbeitet hat.

Der Bereich, der verweist, muss gültig sein; alle Zeiger müssen dereferenzierbar sein, und in der Sequenz, muss die letzte Position von der ersten durch 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

Siehe auch

Referenz

for_each (STL Samples)

Standardvorlagenbibliothek