我有一个迭代器。假设我需要从某个特定点开始而不是从头开始遍历集合。此外,我很难获取存储在集合中的值,因为它们是指针。那么我如何修改我的代码以从不是开始的点遍历我的集合。 ?
代码如下:
for(iter=make.at(level).begin();iter!=make.at(level).end();iter++)
{
Function(*iter);
}
使用这个会报错:
for(iter=make.at(level).begin()+10;iter!=make.at(level).end();iter++)
{
Function(*iter);
}
有不同类型的迭代器:ForwardIterator
、BidirectionalIterator
和 RandomAccessIterator
。
ForwardIterator
允许您使用增量运算符仅向前移动。 BidirectionalIterator
允许两个方向。 RandomAccessIterator
允许任何进步,包括operator+
和operator-
。
您考虑的对象是 RandomAccessIterator
,就像在 std::vector
中找到的那样。不过,std::set
使用的是 BidirectionalIterator
。这意味着您只能递增和递减。
因此,您需要将迭代器置于循环之外并向前推进十次。为简单起见,std::advance
执行此操作,并且对 BidirectionalIterator
和 ForwardIterator
具有不同的兼容性(线性时间,因为只有一次一个增量)和 RandomAccessIterator
(由于 operator+ 而使时间恒定)。
std::set<T>::iterator iter = make.at(level).begin(); //more C++03 way
auto iter = std::begin (make.at(level)); //more C++11 way
std::advance (iter, 10); //start iterator 10 elements past beginning
for (...)
我是一名优秀的程序员,十分优秀!