私は次の投稿に従いました。これは、いくつかの非 const 操作の後に反復子がどのように動作するかを示すシナリオを示しています。
と の違いを理解するのに問題がreference
ありiterator
ます。明確にするための例としてリストされているルールの 1 つを次に示します。
deque: 挿入されたメンバーが deque の末尾 (先頭または末尾) にない限り、すべての反復子と参照が無効になります (この場合、すべての反復子は無効になりますが、要素への参照は影響を受けません) [23.2.1.3/1]
参考にしたサンプルコードはこちら。
std::deque<int> mydeque;
mydeque.push_back(1);
mydeque.push_back(2);
mydeque.push_back(3);
const int& int3 = mydeque.back(); // reference to 3
int& int3 = mydeque.back();
std::deque<int>::iterator itBack = mydeque.crbegin(); // pointing to 3
mydeque.push_back(4);
質問> 私の漠然とした理解が正しければ、次のステートメントは正しいです。
After the calling of the line of `mydeque.push_back(4)`
`int3` is still valid because it is a reference to element.
`itBack` is invalidated because it is an iterator.
ありがとうございました