
Hi Evgeny,
2013/10/30 Evgeny Panasyuk
29.10.2013 19:54, TONGARI J:
I want to query if there's any interest in such a utility:
span(iterator, size) : iterator_range
That reminds me CountedRanges from STL: http://www.youtube.com/watch?** v=dUEA8fHx0r0&t=35m14shttp://www.youtube.com/watch?v=dUEA8fHx0r0&t=35m14s
Thanks for the link,I'll take a look later.
which simply returns iterator_range(it, it + size) for
RandomAccessIterator; for others modeling ForwardIterator, a special iterator adaptor, say, counted_iterator is used, so we don't have to advance it just for getting the end iterator.
What type of underlying iterator you plan to use, let say for ForwardIterator?
So called 'counted_iterator', same category as the wrapped one. It looks like this type will contain not just iterator, and *efficient*
implementation is not clear for me.
The states are: iterator it; std::size_t count; For comparison, only count is compared; dereference is simply *it; increment both it & count; So the code below: for (auto val : span(it, n)) {...} Is equivalent to: for (std::size_t i = 0; i != n, ++i, ++it) {...}
Just imagine case where next(end(span(first, n))) is legal, like when original range has more than n elements. What end(span(first, n)) would have internally, which state?
it = first; count = n; How it can reach end(span(first, n+n))?
Not sure what you mean here.
Perhaps we need whole new range category in order to make it efficient?
I don't think so.
Or maybe just implement algorithms for counted ranges, which can take advantage of counted range, like Stepanov shows above?
Will look later, to see if I missed some points... Thanks,