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