1

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

这是代码:

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

1 回答 1

1

有不同类型的迭代器:ForwardIteratorBidirectionalIteratorRandomAccessIterator

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

您正在考虑的那个是RandomAccessIterator,就像在 中找到的那个std::vectorstd::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 (...)
于 2012-07-09T08:15:52.093 回答