Re: invalidation of iterators on deque
* subramanian100in@yahoo.com, India:
I am copying the following paragraph, as it is, from Stanley Lippman's
C++ Primer 4th edition, page 334.
It says:
"Inserting elements at the front or back of a deque does not
invalidate any iterators. Erasing the front or back element
invalidates only iterators referring to the elements(s) erased.
Inserting or erasing anywhere else in the deque invalidates all
iterators referring to elements of the deque".
I thought insertion or erasure of elements in a deque can potentially
invalidate all iterators into the deque irrespective of position(this
is what happens to vector I think). But the above paragraph says
something different.
Kindly clarify which is correct.
Assuming this is about std::deque:
An insert, anywhere, formally invalidates all iterators to the deque.
However, "An insert at either end ... has no effect on the validity of
references to elements of the deque", ?23.2.1.3/1.
This is also implied by the requirement of "always constant time", i.e. not
amortized constant time but really really constant, for inserts at ends.
The only question is why inserts at ends then should invalidate iterators, but
the same paragraph cited above says they are invalidated, the "..." is
"invalidates all iterators to the deque, but", contrary to Lippman's statement.
However, I suspect that Lippman's statement holds for actual implementations,
and that the statement was made not from a reading of the standard but from a
deep understanding of how this beastie must work on the inside, in practice.
Disclaimer about that in-practice statement: haven't tested. :-)
Cheers, & hth.,
- Alf
--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?