deque でのイテレータの無効化に関して、私は少し混乱しています。(この質問の文脈で)
以下は抜粋です -- The C++ Standard Library: A Tutorial and Reference, by Nicolai M. Josuttis
先頭または末尾以外の要素を挿入または削除する と、deque の要素を参照するすべてのポインター、参照、および反復子が無効になります。
以下は、 SGIサイトからの抜粋です。
deque の反復子無効化のセマンティクスは次のとおりです。Insert (
push_front
およびを含むpush_back
) は、deque を参照するすべての反復子を無効にします。両端キューの途中で消去すると、両端キューを参照するすべての反復子が無効になります。pop_front
両端キュー (およびを含む) の先頭または末尾での消去は、消去されpop_back
た要素を指している場合にのみ反復子を無効にします。
IMHO、deque は、最初のブロックが一方向に成長し、最後のブロックが反対方向に成長するブロックのコレクションです。
- - -
- - -
| - - ^
| - - |
V - - |
- - -
- - -
push_back, push_front
deque イテレータに影響を与えるべきではありません (私は Josuttis に同意します)。
正しい説明は何ですか?これについて標準は何と言っていますか?