Re: Вызов функции произв.класса внутри STL-алгоритма
От: Hades  
Дата: 11.03.05 10:24
Оценка:
Summary

Applies a function to each element in a range.

Synopsis

#include <algorithm>
template <class InputIterator, class Function>
void for_each(InputIterator first, InputIterator last,
Function f);

Description

The for_each algorithm applies function f to all members of the sequence in the range [first, last), where first and last are iterators that define the sequence. Since this a non-mutating algorithm, the function f cannot make any modifications to the sequence, but it can achieve results through side effects (such as copying or printing). If f returns a result, the result is ignored.

Complexity

The function f is applied exactly last — first times.

Example

//
// for_each.cpp
//
#include <vector>
#include <algorithm>
#include <functional>
#include <iostream>
using namespace std;
// Function class that outputs its argument times x
template <class Arg>
class out_times_x : private unary_function<Arg,void>
{
private:
Arg multiplier;
public:
out_times_x(const Arg& x) : multiplier(x) { }
void operator()(const Arg& x)
{ cout << x * multiplier << " " << endl; }
};
int main()

{
int sequence[5] = {1,2,3,4,5};

// Set up a vector
vector<int> v(sequence,sequence + 5);

// Setup a function object
out_times_x<int> f2(2);
for_each(v.begin(),v.end(),f2); // Apply function
return 0;
}

Program Output

2
4
6
8
10

Warnings

If your compiler does not support default template parameters, then you always need to supply the Allocator template argument. For instance, you have to write:

vector<int, allocator<int> >

instead of:

vector<int>

If your compiler does not support namespaces, then you do not need the using declaration for std.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.