Listing 3

template<class InputIterator, class Size = unsigned long>
struct calc_snack : public std::unary_function<InputIterator,Size>
{
    calc_snack() : m_n(0) {};
    calc_snack(const calc_snack & rhs) : m_n(rhs.m_n) {};
    calc_snack& operator=
           (const calc_snack& rhs) { m_n = rhs.m_n; return * this; }
    Size long operator()(InputIterator first, InputIterator last) const
    {
        Size result = 
              (*first) * *(first+1) + *(first+2) - *(first+3) + *(first+4);
        SnacksAvail.erase(result);
        return ++m_n;
    }
    operator Size () const { return m_n; }
private:
    mutable Size m_n;
};