Boost logo

Boost :

From: Greg Colvin (gcolvin_at_[hidden])
Date: 1999-08-17 12:15:29


> Greg Colvin wrote:
> >
> > From: Valentin Bonnard <Bonnard.V_at_[hidden]>
> > > A priori, writing a skiping iterator seems trivial:
> > >
> > > template <typename It, typename Predicate>
> > > class SkippingIterator {
> > > mutable It pos;
> > > Predicate pred;
> > >
> > > void skip () const
> > > { while (pred (*pos)) ++pos; }
> > >
> > > public:
> > > value_type& operator* () const
> > > { skip (); return *pos; }
> > >
> > > void operator++ ()
> > > { skip(); ++pos; }
> > > };
> > >
> > > Except that the semantic near the end is ugly (the precondition
> > > is that there are non skipped elements before the end).
> >
> > I think the precondition is just that pred(*last) is false.
>
> Saying pred(*x) is false is saying that x is non skipped.
>
> We are saying the same thing.

You are right. The difference is just whether the end iterator
is passed to the SkippingIterator constructor or the Predicate
constructor. Probably it would be easier for the user to pass
it to the SkippingIterator constructor.

> This precondition is ugly (why would the elements
> at some position be skippable and not the others ?)

So you don't skip off the end of the sequence. There is no
element to skip at the end.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk