我有一个迭代器。假设我需要从一开始就从某个特定点开始遍历集合。此外,我很难获得存储在集合中的值,因为它们是指针。那么如何修改我的代码来从一个不是开始的点遍历我的集合。 ?
以下是代码:
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);
}
答案 0 :(得分:1)
有不同类型的迭代器:ForwardIterator
,BidirectionalIterator
和RandomAccessIterator
。
ForwardIterator
允许您仅使用increment运算符向前移动。 BidirectionalIterator
允许两个方向。 RandomAccessIterator
允许任何进步,包括operator+
和operator-
。
您正在考虑的问题是RandomAccessIterator
,就像std::vector
中找到的那个一样。但std::set
使用的是BidirectionalIterator
。这意味着你只能增加和减少。
因此,您需要在循环之外创建迭代器并将其向前推进十次。为简单起见,std::advance
执行此操作,并且对BidirectionalIterator
和ForwardIterator
具有不同的兼容性(线性时间因为一次只有一个增量),{{1} }(由于操作符+的恒定时间)。
RandomAccessIterator