$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Yitzhak Sapir (yitzhaks_at_[hidden])
Date: 2002-08-11 04:46:13
> From: Victor A. Wagner, Jr. [mailto:vawjr_at_[hidden]]
> 
> >My idea of a bounded_iterator would have an interface similar to 
> >filter_iterator, except it gets a difference_type bound.  It 
> maintains 
> >count through ++, --, and += of how far you are from the 
> bounds, and any 
> >point beyond the bounds is considered end.
> >
> >This way doing:
> >         std::copy (make_bounded_iterator(str.begin(), 
> str.end(), 5), 
> > make_bounded_iterator(str.end()), std::back_inserter(copy_of_str));
> >would be equivalent to
> >         strncpy (new, str, 5);
> >
> 
> wouldn't a bounded_iterator_end() work better? it would be used as
>          std::copy(str.begin(), bounded_iterator_end(str.begin(), 
> str.end(), 5), std::back_inserter(copy_of_str));
It would work better on random access iterators.
It might/would work worse on bidirectional and forward iterators, since you're requiring two passes on the range instead of one.  I really can't say which one would work slower since your method requires multiple passes, but mine has a little more overhead on each increment and compare.
But worse than that, it wouldn't work at all on input and output iterators.  And that's the problem.
I didn't think of the fact this method would be more straightforward for random access iterators, since my goal was more to have a solution that works for input iterators.  But using template metaprogramming, you could have this be the method used for random access iterators, and also allow a special form in case the bound size is known at compile time.