【发布时间】:2011-04-10 01:49:56
【问题描述】:
是否可以在不更改迭代器的情况下查看迭代器当前指向的容器中的下一个元素?
例如在 std::set 中,
int myArray[]= {1,2,3,4};
set <int> mySet(myArray, myArray+4);
set <int>::iterator iter = mySet.begin();
//peek the next element in set without changing iterator.
mySet.erase(iter); //erase the element if next element is n+1
【问题讨论】:
-
为什么不直接复制一份并推进那份呢?在继续之前,请确保检查任一迭代器是否等于
.end()! -
我想我把迭代器和指针混淆了。当您将指针分配给指针时,如果一个指针发生变化,两者都会发生变化,但为什么在迭代器的情况下不会发生?
-
@GMan: Boost 有
prior和next函数来做到这一点(它按值获取迭代器,因此按照您的建议进行复制)。详情请见boost.org/libs/utility/utility.htm。 -
@xor:如果您有两个指针,并更改其中一个,另一个保持不变。不过请理解,我们谈论的是更改指针,而不是指针的所指对象。
-
@xor:你应该小心你描述事物的方式。严格来说,你说的都是错误的。
j不会随i改变,它是一个不同的变量,其值与i的值无关。j指向 的内容发生了变化,i也发生了变化。