On 08/12/2011 03:54 PM, Jonathan M Davis wrote:

In the case of container that uses nodes - such as a linked list - because you
can add and remove elements without affecting other elements, iterators and
ranges don't tend to get invalidated as easily. As long as you don't remove
the element (or elements in the case of a range - assuming that it keeps track
of its two end points, as is likely) that it points to, then adding or
removing elements from the container shouldn't invalidate the iterator/range.

"shouldn't" isn't a guarantee. Where there is "shouldn't", there can't be stableRemove*, no?


So, basically what it comes down to is the short answer. A range which has
been invalidated doesn't point to what it's supposed to point to anymore, and
using it results in undefined behavior. It's less likely to blow up in D,
because it's generally memory-safe, but you're going to get incorrect
behavior.

- Jonathan M Davis

suppose your linked list range points to a node X. element in X is removed by the linked list, and the range automagically moves to X.next (or X.prev). Is the range invalid by this standard or not? (no way 'san ifrinn I'm going to implement that, though).


heh heh. most of this business has only convinced me I want immutable containers.

Reply via email to