2011-01-17 15 views
7

Chcę zainicjować iterator (dowolnego rodzaju) z następcą innego iteratora (tego samego rodzaju). Poniższy kod działa z przypadkowymi iteratorów dostępu, ale nie jest on z przodu lub iteratorów dwukierunkowych:Następca iteratora

Iterator i = j + 1; 

Prosty obejście jest:

Iterator i = j; 
++i; 

Ale to nie zadziała jak startowe stament z pętla for. Mógłbym użyć szablonu funkcję tak:

template <typename Iterator> 
Iterator succ(Iterator it) 
{ 
    return ++it; 
} 

a następnie używać go tak:

Iterator i = succ(j); 

Czy jest coś takiego w STL lub Boost czy jest tam jeszcze lepszym rozwiązaniem I nie jestem świadomy?

+1

Mówisz, że 'Iterator i = j; ++ i; 'nie jest możliwe wewnątrz pętli' for' - czy możesz ją rozwinąć? Powinien działać dobrze w pętli 'for'. –

+0

@Michael: Miałem na myśli miejsce 'x' w' for (x; y; z) ', nie wewnątrz samej pętli. – fredoverflow

+0

Widzę; to ma sens. –

Odpowiedz

14

Myślę, że szukasz next in Boost.Utility. Ma także prior do uzyskania iteratora do poprzedniego elementu.

Aktualizacja:

C++ 11 wprowadzono std::next i std::prev.

+0

dla kompletności, jest też 'prev' :) –

+0

@Matthiew M .: Myślę, że masz na myśli' prior'. Jest w moim linku. Teraz dodałem wzmiankę o tym do mojej odpowiedzi. –

+0

'next' jest teraz częścią C++ 11 http://en.cppreference.com/w/cpp/iterator/next – alfC

Powiązane problemy