2012-01-18 14 views
8

私はタイプがset<int>であり、どこかにイテレータを入れたいと思っています。セット内の任意のインデックスから要素を取得する

私は次のことをやっている:

set<int>::iterator it = myset.begin() + 5; 

これが動作していないと私はそれをしたい場所にイテレータを取得するための正しい方法は何である理由私は好奇心旺盛です。

+3

CとC++は同じ言語ではありません。 –

答えて

17

myset.begin() + 5;は、ランダムアクセスイテレータに対してのみ機能します。イテレータはstd::setではありません。

入力イテレータの場合

は、機能std::advanceあります:

auto it = std::next(myset.begin(), 5); 

std::nextが必要です:C++ 11では

set<int>::iterator it = myset.begin(); 
std::advance(it, 5); // now it is advanced by five 

も似ていますが、その引数を変更しないstd::nextがあります前方イテレータ。しかし、std::set<int>::iteratorは双方向イテレータなので、advancenextの両方が動作します。