2010-06-16 14 views
5

Czy istnieje sposób dostępu do elementu na wektorze począwszy od tyłu? Chcę uzyskać dostęp przedostatnią element.currently Używam następujących do osiągnięcia tego:uzyskiwanie dostępu do wektora od tyłu

myVector[myVector.size() - 2] 

ale to wydaje się powolne i niezgrabne, czy istnieje lepszy sposób?

Odpowiedz

7

Nie może być szybciej, ale może to wyglądać ładniej:

myVector.end()[-2] 
+10

Lub 'myVector.rbegin() [1]'. –

+0

@Pavel: Najbardziej lubię to rozwiązanie, ma ono sens i wygląda bardzo czysto. – Faken

+0

Należy jednak pamiętać, że punkt B o tym nie jest tak naprawdę jeszcze szybszy. –

5

Cóż zawsze można użyć wektora :: powrót(). Jeśli chcesz iteracyjne od tyłu, użyj reverse_iterator:

vector<something>::reverse_iterator iter = v.rbegin(); 
iter++; //Iterates backwards 

Wektory są do szybkiego dostępu losowego, więc na swój sposób jest po prostu w porządku. Dostęp do elementu wektorowego przy dowolnym indeksie jest operacją O (1).

+4

wektor :: reverse_iterator iter = v.rbegin(); –

+0

Dzięki, naprawiłem to. – fingerprint211b

0

Twoja droga jest całkowicie poprawna i całkiem szybka, z tym że powinieneś sprawdzić myVector.size() > 1.

+1

Czy mogę to zrobić jak myvector.at (myVector.end - 2) i nawet wolniej. – Faken

+0

'at' używa wyjątków do wskazania błędu poza zakresem. Nie użyłbym tego w tym prostym przypadku. –

Powiązane problemy