无法保证使用输入迭代器第二次遍历容器将以相同的顺序移动值。在输入迭代器增加后,也无法保证其先前值仍可被取消引用。
或
InputIterator是一个可以从指向元素读取的迭代器。 InputIterators仅保证单通道算法的有效性:一旦InputIterator i递增,其先前值的所有副本都可能无效。
为什么其先前值的所有副本都可能无效?这些陈述的概念是什么?
答案 0 :(得分:0)
这就是说你的迭代器只能读取它当前指向的元素,它不知道前一个或下一个元素。
考虑让两个迭代器指向std::list<T>
Item1 ---> Item2 ---> Item3 ---> Item4
Iter0 ----↑ ↑
Iter1----------------ˈ
想象一下将这些增加如下:
Iter0 = Iter1;
Iter1++;
增加后,您的迭代器集将如下所示:
Item1 ---> Item2 ---> Item3 ---> Item4
Iter0 ------------------↑ ↑
Iter1------------------------------ˈ
Iter1
的先前值存储在Iter0
中,因此它始终指向Iter1
之前的元素。
现在想象一下我删除了Item2
。
Item1 ---> Item3 ---> Item4
Iter0 -??? ↑
Iter1-------------------ˈ
Iter1
仍然有效并指向Item3
。
Iter0
这是Iter1
之前的值不再有效,并指向&#34;没有&#34; (意味着解除引用此迭代器现在将被视为未定义的行为)。