2013-07-07 72 views
3

我跟着下面的帖子來說明在一些非常量操作之後迭代器是如何工作的。`迭代器`和`元素引用之間的區別`

Iterator invalidation rules

我有問題要了解referenceiterator之間的差異。下面是作爲例子列出的澄清規則之一:

雙端隊列:所有迭代器和引用是 無效,除非該插入部件是在一個端部(正面或背面) 雙端隊列(在這種情況下所有迭代器被無效,但 引用元素不受影響)[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. 

謝謝

回答

1

是的,這聽起來是正確的。迭代器失效的原因,但是引用沒有,迭代器需要能夠正確地執行++--,但是將某些東西推到deque上可能會導致它重新排列其結構以跟蹤該結構。但是,deque保證它不會自己移動元素,即使它必須重新調整它們周圍的容器。

這表明deque的實現在它的迭代器中內置了一個額外的間接級別,它將它隱藏起來。但是,這幾乎是迭代器的全部要點,以及它們與引用不同的原因。

相關問題