2012-01-18 30 views
8

Mam zestaw typu set<int> i chcę uzyskać iterator w miejscu, które nie jest początkiem.Pobierz element z dowolnego indeksu w zestawie

robie co następuje:

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

Jestem ciekawy dlaczego to nie działa i co to jest poprawny sposób, aby dostać się do miejsca, gdzie iterator chcę go.

+3

C i C++ nie są tym samym językiem. –

Odpowiedz

17

myset.begin() + 5; działa tylko dla iteratorów dostępu swobodnego, których iteratory od std::set nie są.

Dla iteratorów wejściowych, istnieje funkcja std::advance:

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

w C++ 11, istnieje również std::next który jest podobny, ale nie zmienia swój argument:

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

std::next wymaga przesyłaj dalej iterator. Ale ponieważ std::set<int>::iterator jest dwukierunkowym iteratorem, zarówno advance jak i next będą działać.

Powiązane problemy