Confusion on iterators invalidation in deque?

From the standard working draft template void insert ( iterator position , InputIterator first , InputIterator last ) 1 Effects: An insert in the middle of the deque invalidates all the iterators and references to elements of the deque. An insert at either end of the deque invalidates all the iterators to the deque, but has no effect on the validity of references to elements of the deque So both are correct. As Josuttis indicates, insertion at the front or back doesn't invalidate references to elements of the deque, only iterators to the deque itself EDIT: A more up-to-date draft says essentially the same thing (section 23.2.2.3).

From the standard working draft template void insert ( iterator position , InputIterator first , InputIterator last ); 1 Effects: An insert in the middle of the deque invalidates all the iterators and references to elements of the deque. An insert at either end of the deque invalidates all the iterators to the deque, but has no effect on the validity of references to elements of the deque. " So both are correct.As Josuttis indicates, insertion at the front or back doesn't invalidate references to elements of the deque, only iterators to the deque itself.

EDIT: A more up-to-date draft says essentially the same thing (section 23.2.2.3).

The SGI implementation probably uses a growable array, so if an insert causes the array to grow, the iterators pointing to the old array are invalid. EDIT: Looking in section 17.2.3 of The C++ Programming Language Third Edition, I don't see anything in the description of deque that indicates what operations preserve or invalidate iterators. I may be looking in the wrong spot or the behavior may be undefined.

IMHO, deque is collection of blocks with first block growing in one direction and the last block in opposite direction. Your opinion is your prerogative, but it's wrong. Deque is such a container semantically, but in terms of implementation it's designed to be implemented by one or more blocks of memory.

C++'s iterator invalidation rules come from implementation, so this is why. Arguably this is a small abstraction leak but, well, whatever. The SGI STL documentation is not the proper documentation to read, because the SGI STL is not the C++ Standard Library.

Unfortunately, Josuttis is one of those people who calls it "the STL", and this has led to your confusion. Following is the excerpts from -- The C++ Standard Library: A Tutorial and Reference, By Nicolai M. Any insertion or deletion of elements other than at the beginning or end invalidates all pointers, references, and iterators that refer to elements of the deque.

Put simply, this passage from Josuttis is misleading in implying that the insertion or deletion of elements that are at the beginning or end do not invalidate pointers, references or iterators … though it's worth noting that he never comes out and asserts this outright. What's this STL vs. "C++ Standard Library" fight all about? I'm not sure what further reference to credible sources you're looking for — the relevant standard passage has already been cited and quoted.

I cant really gove you an answer,but what I can give you is a way to a solution, that is you have to find the anglde that you relate to or peaks your interest. A good paper is one that people get drawn into because it reaches them ln some way.As for me WW11 to me, I think of the holocaust and the effect it had on the survivors, their families and those who stood by and did nothing until it was too late.

Related Questions