Wskaźnik na element wektora - sprawdzenie czy można przesunąć dalej

0

Witam,
mam takie pytanie:
w jednej klasie mam wektor pewnych obiektów a w innej wskaźnik, który porusza się po elementach tego wektora.
Czy jest jakaś możliwość w łatwy sposób sprawdzić, czy wskaźnik można przesunąć do przodu o 1? Tzn. czy da się jakoś sprawdzić, czy wskaźnik nie wyszedł poza wielkość wektora?
Przykładowo: mamy wektor ze 100 elementami vector<int> vec(100); a wskaźnik ustawiamy na losowym elemencie np. wsk = &vec[rdm]; i poruszamy się do przodu tj. ++wsk;. Jaki warunek zrobić, żeby się upewnić, że można przesunąć wskaźnik?

Z góry dzięki za pomoc.

3

Tak, przestań używać wskaźników i przerzuć się na iteratory. Wtedy sprawdzasz czy pozycja twojego iteratora jest różna od vec.end() i masz. Używanie "normalnych" wskaźników na wektorze może być problematyczne.

0

Tak jak @winerfresh napisał. Ale jeśli już koniecznie chcesz:
http://ideone.com/UFPR48

0

A da się ustawić iterator na środkowej wartości tablicy, czy trzeba zawsze zaczynać od begin? Bo może rzeczywiście to dobre rozwiązanie jest...

0

Nie da się, bo iteratory zawsze mają dostęp sekwencyjny. Możesz jednak w miarę szybko przejść do elementu środkowego. Dodatkowo jak byś napisał co robisz, to może dało by się podać dokładniejsze rozwiązanie.

0

Wydawało mi się, że w przypadku wektorów iteratory mają taki dostęp -> w końcu to zwykła tablica i chyba łatwo się dobrać do danego iteratora.
Dawno nie przerabialem iteratorów i muszę jeszcze o tym poczytać.

Ogólnie to mam bardzo dużą tablicę (miliony elementów) i się po niej poruszam. Czasami jednak muszę skoczyć o więcej kroków do przodu i zaczynają się problemy. Tzn. od biedy wiem jak to rozwiązać, ale nie podoba mi się to rozwiązanie i szukam czegoś bardziej przyjaznego dla oka i wydajności ;-).

0

Wektory mają dostęp losowy, ale iterator z idei ma dostęp sekwencyjny, jednak w teorii istnieje możliwość by przesunąć iterator o N pozycji w czasie stałym (po prostu musi mieć zaimplementowaną odpowiednią metodę). W C++ to będzie metoda operator +.

1 użytkowników online, w tym zalogowanych: 0, gości: 1