//  (C) Porkolab 2003
//
//  A.6.22.
//  
//  Nonmodifying Sequence Algorithms: for_each




template<class In, class Op> Op for_each(In first, In last, Op f)
{
    while (first != last) f(*first++);
    return f;
}


/*
 *  Usage of for_each
 *
 */

void extract(const list<Club>& lc, list<Person*>& off) // place the officers from `lc' on `off'
{
    for_each(lc.begin(),lc.end(),Extract_officers(off));
}


class Extract_officers {
    list<Person*>& lst;
public:
    explicit Extract_officers(list<Person*>& x) : lst(x) { }

    void operator()(const Club& c)
        { copy(c.officers.begin(),c.officers.end(),back_inserter(lst)); }
};