
On Fri, May 15, 2009 at 8:15 AM, John Dlugosz
Date: Wed, 13 May 2009 02:18:07 -0400 From: Scott McMurray
Subject: Re: [Boost-users] iterators must go To: boost-users@lists.boost.org Message-ID: Content-Type: text/plain; charset=UTF-8 On Sun, May 10, 2009 at 09:24, Neal Becker
wrote: Interesting presentation:
http://www.boostcon.com/site- media/var/sphene/sphwiki/attachment/2009/05/08/iterators-must-go.pdf
Very persuasive, but it's careful to touch only the examples that look nice. Note, for example, that every range was a whole container.
The three-iterators part was somewhat handwaved-over as well. Take this bit of current code, for example:
auto i = find(c.begin(), c.end(), some_pred()); rotate(c.begin(), i, c.end());
How do you do that nicely with ranges, when he has find returning a range? (Since right now, it implicitly actually returns 2 ranges.)
And how does insertion work? Do we still need to keep the iterators around for insertion position?
I'd love to see the finicky bits worked out, though, since I do like the idea.
~ Scott
Any place you really want a single iterator, a range of one value would work. For appending or streaming out, you really want the concept of an open-ended range.
You can shrink ranges from the front or from the back, but you can't grow them. Andrei repeated this several times in his talk so I think it's important. It is part of the improved safety of ranges over iterators. The way I understand this, open-ended ranges don't exist. One way I can think of that fits ranges principles is to use a special insertion range, which has the elements to be inserted and a reference to a container. The range would then call push_back on the container from its pop_front member function. Emil Dotchevski Reverge Studios, Inc. http://www.revergestudios.com/reblog/index.php?n=ReCode