有不同类型的迭代器: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 (...)