Container insertion and removal
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Sat Mar 6 11:55:49 PST 2010
Steven Schveighoffer wrote:
> Andrei Alexandrescu Wrote:
>
>> In the STL world, writing container-independent code is generally
>> shunned (see e.g.
>> http://www.informit.com/content/images/0201749629/items/item2-2.pdf).
>>
>> One problem is a very small intersection between the functionalities
>> offered by the various STL containers, and the conceptual organization
>> that is weaker than that of iterators.
>>
>> A worse problem is iterator invalidation rules, something that we'll
>> need to address too. I'm thinking that the best defense is a strong
>> offense, and I plan to define the following naming convention:
>>
>> Methods such as insert, remove, pushFront, pushBack, removeFront,
>> removeBack, are assumed to affect the container's topology and must be
>> handled in user code as such.
>>
>> In addition to those, a container may also define functions named after
>> the above by adding a "soft" prefix (e.g. softInsert, softRemove...)
>> that are guaranteed to not affect the ranges currently iterating the
>> container.
>>
>> Generic code that needs specific iterator (non-)invalidation rules can
>> use softXxx methods, in confidence that containers not supporting it
>> will be ruled out during compilations.
>>
>> Sounds good?
>
> How can softRemove not affect iterating ranges? What if the range is positioned on the element removed?
With GC, you can softRemove things without invalidating iterators.
> The only two containers that would support softInsert would be linked list and sorted map/set. Anything else might completely screw up the iteration. I don't see a lot of "generic" use for it.
Singly linked lists, doubly linked lists, various trees - three's a
crowd. Most node-based containers support softInsert.
Andrei
More information about the Digitalmars-d
mailing list