Boost logo

Boost :

From: Nigel Stewart (nigels_at_[hidden])
Date: 2003-07-22 21:37:51


Hello Jan,

Oops, I stand corrected.
I had not understood the convention properly!

In a nutshell:

1. The capacity is preserved unless explicity
    adjusted via set_capacity, or implicitly
    changed by resize.

2. insert may cause front elements to be overwritten

3. rinsert may cause back elements to be overwritten

In this way, insert is related to push_back
in terms of semantics, and rinsert is related
to push_front.

Given that this could conceivably be swapped
around, do we have a rationale that we could
state in the documentation?

As the caveats:

Inserting to the front of a full buffer
would result in those front-most elements being
overwritten by the back-most. (No effect,
overall)

Reverse inserting to the back of a full buffer
would result in those back-most elements being
overwritten by the front-most. (No effect,
overall)

Nigel

Jan Gaspar wrote:
> Hi Nigel,
>
> It cannot be done as you propose. Please check the archive.
> It can be done like this:
> cb.rinsert(cb.begin(), 2); // rinsert
> cb.push_front(2); // this is equivalent
>
> It will be documented and I think not everything can be driven by "the principle
> of least surprise".
>
> Jan
>
>> > Inserting at the beginning or "close to the beginning"
>> > of the circular_buffer is another trap.
>> >
>> > boost::circular_buffer<int> cb(5, 1);
>> > cb.insert(cb.begin(), 2); // nothing will be inserted

>>The following should be exactly equivalent:
>> cb.insert(cb.begin(), 2);
>> cb.push_front(2);

>>As a proposed semantic:
>>
>> Insertion to the front or back will always be
>> equivalent to a corresponding sequence of
>> push_front or push_back.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk