C++ 使用输入迭代器第二次遍历容器
不能保证使用输入迭代器第二次遍历容器时会以相同的顺序遍历这些值。此外,在输入迭代器递增后,也不能保证其先前的值仍然可以被取消引用 或 InputIterator是一个迭代器,可以读取指向的元素。InputIterator仅保证单次传递算法的有效性:一旦InputIterator i递增,其先前值的所有副本都可能无效C++ 使用输入迭代器第二次遍历容器,c++,iterator,input-iterator,C++,Iterator,Input Iterator,不能保证使用输入迭代器第二次遍历容器时会以相同的顺序遍历这些值。此外,在输入迭代器递增后,也不能保证其先前的值仍然可以被取消引用 或 InputIterator是一个迭代器,可以读取指向的元素。InputIterator仅保证单次传递算法的有效性:一旦InputIterator i递增,其先前值的所有副本都可能无效 为什么以前值的所有副本都可能无效?这些语句的概念是什么?意思是迭代器只能读取它当前指向的元素,它不知道前面或后面的元素 考虑使用两个迭代器指向std::list 设想如下所示递增这些
为什么以前值的所有副本都可能无效?这些语句的概念是什么?意思是迭代器只能读取它当前指向的元素,它不知道前面或后面的元素 考虑使用两个迭代器指向
std::list
设想如下所示递增这些值:
Iter0 = Iter1;
Iter1++;
增量后,迭代器集如下所示:
Item1 ---> Item2 ---> Item3 ---> Item4
Iter0 ------------------↑ ↑
Iter1------------------------------ˈ
Iter1
之前的值存储在Iter0
中,因此它始终指向Iter1
之前的元素
现在想象一下,我删除了Item2
Item1 ---> Item3 ---> Item4
Iter0 -??? ↑
Iter1-------------------ˈ
Iter1
仍然有效,并指向Item3
Iter0
是Iter1
的前一个值,它不再有效,并指向“nothing”(意味着取消引用此迭代器现在将被视为未定义的行为)。请用std::cin
命名您的源代码!你为什么连名字都不提就引用书籍?!
Item1 ---> Item3 ---> Item4
Iter0 -??? ↑
Iter1-------------------ˈ