Are iterators and ranges going to co-exist?

Rainer Deyke rainerd at eldwood.com
Tue Jul 20 01:30:22 PDT 2010


On 7/20/2010 01:39, Peter Alexander wrote:
> Iterator is probably a bad name for describing this concept, as it
> implies that they have the same usage as ranges, but they do not. An
> iterator/cursor points to one element -- a generic pointer if you like.
> Ranges define a self-sufficient machine for iteration, which makes them
> overkill (and unwieldy) when you just want to refer to one element.

I agree with this.  Ranges are great for iterating, but iterators are
better for defining ranges.  This leads to confusion.

The great strength of STL-type iterators is that you can easily refer to
any single element or any range of elements out of a sequence.

Take, for example, the 'find' algorithm.  When I use 'find' in C++, I
use it to find a position, not an element.  I can do any of the following:
  - Iterate through all the items after the found item.
  - Iterate through all the items before the found item.
  - Iterate through all the items before the found item, and then
iterate through all the items after the found item, with just a single
search.
  - Find two items (in a random-access range) and compare the iterators
to see which one comes first.
  - Iterate through all the items /between/ two found items.

The last one is especially interesting to me.  STL-style iterators allow
me to easily define a range by specifying two end points, even if the
end points come from different sources.  I don't think this is possible
with D-style ranges.  It's certainly not possible in any clean way,
because D-style ranges have no provision for specifying individual
positions in a sequence.


-- 
Rainer Deyke - rainerd at eldwood.com


More information about the Digitalmars-d mailing list