遍历从特定索引到特定索引的集合

时间:2012-07-09 07:57:12

标签: c++ set traversal

我有一个迭代器。假设我需要从一开始就从某个特定点开始遍历集合。此外,我很难获得存储在集合中的值,因为它们是指针。那么如何修改我的代码来从一个不是开始的点遍历我的集合。 ?

以下是代码:

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);
    }

1 个答案:

答案 0 :(得分:1)

有不同类型的迭代器:ForwardIteratorBidirectionalIteratorRandomAccessIterator

ForwardIterator允许您仅使用increment运算符向前移动。 BidirectionalIterator允许两个方向。 RandomAccessIterator允许任何进步,包括operator+operator-

您正在考虑的问题是RandomAccessIterator,就像std::vector中找到的那个一样。但std::set使用的是BidirectionalIterator。这意味着你只能增加和减少。

因此,您需要在循环之外创建迭代器并将其向前推进十次。为简单起见,std::advance执行此操作,并且对BidirectionalIteratorForwardIterator具有不同的兼容性(线性时间因为一次只有一个增量),{{1} }(由于操作符+的恒定时间)。

RandomAccessIterator