0
無法保證第二次使用輸入迭代器遍歷容器時,將以相同的順序遍歷這些值。在輸入迭代器遞增後,不能保證其先前的價值仍可以被取消。第二次使用輸入迭代器遍歷容器
或
的InputIterator爲能夠從被指向的元件讀取的迭代器。 InputIterator只保證單遍算法的有效性:一旦InputIterator i增加,其以前值的所有副本都可能失效。
爲什麼它以前的值的所有副本可能會失效?這些陳述的概念是什麼?
無法保證第二次使用輸入迭代器遍歷容器時,將以相同的順序遍歷這些值。在輸入迭代器遞增後,不能保證其先前的價值仍可以被取消。第二次使用輸入迭代器遍歷容器
或
的InputIterator爲能夠從被指向的元件讀取的迭代器。 InputIterator只保證單遍算法的有效性:一旦InputIterator i增加,其以前值的所有副本都可能失效。
爲什麼它以前的值的所有副本可能會失效?這些陳述的概念是什麼?
這是說你的迭代器只能讀取它當前指向的元素,它不知道前一個或下一個元素。有兩個迭代器指向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
不再有效,並指向「無」(意味着取消引用此迭代器現在將被視爲未定義的行爲)。
想想'std :: istream_iterator'與'std :: cin' – Jarod42
請給出您的消息來源!你爲什麼從書中引用,甚至沒有提及他們的名字?! –