"Steven Schveighoffer" <schvei...@yahoo.com> wrote in message
news:op.vf5kynqgeav...@localhost.localdomain...
On Tue, 20 Jul 2010 09:52:00 -0400, Andrei Alexandrescu
<seewebsiteforem...@erdani.org> wrote:
On 07/20/2010 03:01 AM, Peter Alexander wrote:
Some more arguments for iterators/cursors:
1. How would you implement Floyd's cycle finding algorithm using ranges?
(http://en.wikipedia.org/wiki/Cycle_detection#Tortoise_and_hare)
It uses two iterators over the same range. You would have to wastefully
use 2 ranges that have the same end coordinate.
I think there's a confusion somewhere. You may want to check out the
SList definition in std.algorithm. A SList range is exactly one pointer
thick. With singly-linked lists it's the iterator approach that is
wasteful because it canonically transports a null pointer as end().
That is an example of a single exception to the rule :) AFAIK, no other
container types have ranges with no end pointer or length.
zstrings, pipes, and various other streams. Various calculated numeric
series. Ropes and other binary trees (threaded trees can be traversed with a
single pointer and no stack). Probably other classses of containers. And
while SLists are "so (sic) unique", very large amounts of very sophisticated
code have been written using just that "limited" datatype.
It also makes SList ranges less expressive. For example, what if I wanted
a range between two elements in the list? Such a range is actually
unconstructable. SList is not a very good example of a container, because
it is so unique and limited.
-Steve