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