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; };