2017-01-24 45 views
0

無法保證第二次使用輸入迭代器遍歷容器時,將以相同的順序遍歷這些值。在輸入迭代器遞增後,不能保證其先前的價值仍可以被取消。第二次使用輸入迭代器遍歷容器

的InputIterator爲能夠從被指向的元件讀取的迭代器。 InputIterator只保證單遍算法的有效性:一旦InputIterator i增加,其以前值的所有副本都可能失效。

爲什麼它以前的值的所有副本可能會失效?這些陳述的概念是什麼?

+3

想想'std :: istream_iterator'與'std :: cin' – Jarod42

+0

請給出您的消息來源!你爲什麼從書中引用,甚至沒有提及他們的名字?! –

回答

0

這是說你的迭代器只能讀取它當前指向的元素,它不知道前一個或下一個元素。有兩個迭代器指向std::list<T>

  Item1 ---> Item2 ---> Item3 ---> Item4 
Iter0 ----↑   ↑ 
Iter1----------------ˈ 

想想想象遞增這些如下:

Iter0 = Iter1; 
Iter1++; 

增量後,你的迭代器的設置是這樣的:

   Item1 ---> Item2 ---> Item3 ---> Item4 
Iter0 ------------------↑   ↑ 
Iter1------------------------------ˈ 

以前的值Iter1是s改成Iter0,所以它總是指向Iter1之前的元素。

現在想象一下,我執行Item2的刪除。

   Item1 ---> Item3 ---> Item4 
Iter0 -???    ↑ 
Iter1-------------------ˈ 

Iter1仍然有效,並指向Item3

Iter0這是以前的值Iter1不再有效,並指向「無」(意味着取消引用此迭代器現在將被視爲未定義的行爲)。