Boost logo

Boost Users :

Subject: Re: [Boost-users] iterators must go
From: Emil Dotchevski (emildotchevski_at_[hidden])
Date: 2009-05-15 12:28:22


On Fri, May 15, 2009 at 8:15 AM, John Dlugosz <JDlugosz_at_[hidden]> wrote:
>> Date: Wed, 13 May 2009 02:18:07 -0400
>> From: Scott McMurray <me22.ca+boost_at_[hidden]>
>> Subject: Re: [Boost-users] iterators must go
>> To: boost-users_at_[hidden]
>> Message-ID:
>>       <fa28b9250905122318s3460e1dam5d624160d95ced5_at_[hidden]>
>> Content-Type: text/plain; charset=UTF-8
>>
>> On Sun, May 10, 2009 at 09:24, Neal Becker <ndbecker2_at_[hidden]>
> 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


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net