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

ForwardIteratorイテレータには、、、BidirectionalIteratorおよびのさまざまなタイプがありますRandomAccessIterator

ForwardIteratorインクリメント演算子を使用して、前方にのみ移動できます。BidirectionalIterator両方向を許可します。およびRandomAccessIteratorを含む任意の進歩を許可します。operator+operator-

あなたが考えているのはRandomAccessIterator、にあるようなものstd::vectorです。std::setただし、使用するのはですBidirectionalIterator。つまり、インクリメントとデクリメントしかできません。

したがって、イテレータをループの外側にして、10回進める必要があります。簡単にするために、これを行い、、(一度に1つの増分しかないため線形時間)、および(演算子+による定数時間)のstd::advance互換性が異なります。BidirectionalIteratorForwardIteratorRandomAccessIterator

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 に答える