使用输入迭代器第二次遍历容器

时间:2017-01-24 18:54:36

标签: c++ iterator input-iterator

  

无法保证使用输入迭代器第二次遍历容器将以相同的顺序移动值。在输入迭代器增加后,也无法保证其先前值仍可被取消引用。

  

InputIterator是一个可以从指向元素读取的迭代器。 InputIterators仅保证单通道算法的有效性:一旦InputIterator i递增,其先前值的所有副本都可能无效。

为什么其先前值的所有副本都可能无效?这些陈述的概念是什么?

1 个答案:

答案 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; (意味着解除引用此迭代器现在将被视为未定义的行为)。