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

2015-01-21 00:19
Mały Orzeł
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.

Pozostało 580 znaków

2015-01-21 00:28
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.

Pozostało 580 znaków

2015-01-21 01:04
0

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


░█░█░█░█░█░█░█░█░█░█░█░

Pozostało 580 znaków

2015-01-21 02:03
Wielki Kaczor
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...

Pozostało 580 znaków

2015-01-21 02:08
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.

Pozostało 580 znaków

2015-01-21 02:40
Pijany Lew
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 ;-).

edytowany 1x, ostatnio: furious programming, 2016-12-13 18:26

Pozostało 580 znaków

2015-01-21 02:57
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 +.

RandomAccessIterator, czyli iterator wektora ma dostęp losowy w gwarantowanym czasie O(1) http://en.cppreference.com/w/cpp/concept/RandomAccessIterator - kq 2015-01-21 07:12

Pozostało 580 znaków

2015-01-21 04:18
0

http://en.cppreference.com/w/cpp/iterator/advance


░█░█░█░█░█░█░█░█░█░█░█░

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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