for_each
지정 된 함수 개체 범위 내에서 앞으로 순서로 각 요소에 적용 됩니다 및 함수 개체를 반환 합니다.
template<class InputIterator, class Function>
Function for_each(
InputIterator _First,
InputIterator _Last,
Function _Func
);
매개 변수
_First
첫 번째 요소의 위치에서 작동 하는 범위에서 주소를 지정 하는 입력된 반복기입니다._Last
위치 하나 과거 최종 요소 범위의 주소를 지정 하는 입력된 반복기에서 작동 합니다._Func
범위에 있는 각 요소에 적용 되는 사용자 정의 함수 개체입니다.
반환 값
모든 요소에에서 적용 된 후 함수 개체의 복사본입니다.
설명
알고리즘 for_each 다른, 사용자 지정한 방법으로 각 요소의 범위 내에서 수정을 허용 매우 뛰어납니다.Templatized 함수는 서로 다른 매개 변수를 전달 하 여 수정 된 형태로 재사용 될 수 있습니다.사용자 정의 함수 내의 모든 요소를에서 처리 한 후 알고리즘 반환할 수 있습니다 내부 상태 정보를 축적 됩니다.
참조 범위 유효 해야 합니다. 모든 포인터 dereferenceable 이어야 하며, 시퀀스에서 마지막 위치에서 첫 번째 접근할 수 여 증분 합니다.
복잡 한 최대 선형으로 된 (_Last - _First) 비교 합니다.
예제
// 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;
}
요구 사항
헤더: <algorithm>
네임 스페이스: std