Aracılığıyla paylaş


for_each

Belirtilen işlev nesne her öğe bir aralık içinde ileriye doğru sırayla uygulanır ve işlevi nesnesi döndürür.

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

Parametreler

  • _First
    İlk öğenin konumu üzerinde işletilen aralığında adresleme giriş Yineleyici.

  • _Last
    Giriş Yineleyici konumu bir son öğe geçen aralıktaki adresleme üzerinde çalışırdı.

  • _Func
    Kapsama alanındaki her öğe için uygulanan kullanıcı tanımlı işlevin nesnesi.

Dönüş Değeri

Tüm öğeleri aralıktaki uygulandıktan sonra işlev nesnenin bir kopyasını.

Notlar

Algoritma for_each değiştirilme aralığı içindeki her öğenin farklı, kullanıcı tarafından belirtilen şekilde izin vermek çok esnek bir programdır.Templatized işlevleri değiştirilmiş formda farklı parametreler aktararak tekrar.Kullanıcı tanımlı işlevler, içindeki tüm öğeler aralıktaki işledikten sonra algoritma döndürebilir bir iç durum bilgileri birikebilir.

Başvurulan aralığı geçerli olması gerekir; Tüm işaretçiler dereferenceable ve sıra içinde son konuma birinciden erişilebilmelidir tarafından incrementation.

Karmaşıklığını en fazla olan doğrusal (_Last – _First) karşılaştırmaları.

Örnek

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

Gereksinimler

Başlık: <algorithm>

Namespace: std

Ayrıca bkz.

Başvuru

for_each (STL Samples)

Standart Şablon Kütüphanesi