2010-06-16 10 views
5

C'è un modo per accedere a un elemento su un vettore a partire dal retro? Voglio accedere al penultimo element.currently sto utilizzando la seguente per raggiungere questo:accesso a un vettore dal retro

myVector[myVector.size() - 2] 

ma questo sembra lento e goffo, c'è un modo migliore?

risposta

7

Non rischia di essere più veloce, ma questo potrebbe essere più bello:

myVector.end()[-2] 
+10

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

+0

@Pavel: mi piace la soluzione migliore, ha più senso e sembra molto pulita. – Faken

+0

Si noti tuttavia che il punto di Ben su questo non essere più veloce si applica comunque. –

5

Ebbene si può sempre usare vector :: back(). Se si vuole scorrere dalla parte posteriore, utilizzare il reverse_iterator:

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

vettori sono fatti per l'accesso casuale veloce, quindi la tua strada è bene troppo. L'accesso a un elemento vettoriale a qualsiasi indice è un'operazione O (1).

+4

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

+0

Grazie, risolto. – fingerprint211b

0

Il tuo modo è perfettamente valido e abbastanza veloce, tranne che è necessario controllare myVector.size() > 1.

+1

Oppure potrei farlo come myvector.at (myVector.end - 2) e renderlo ancora più lento. – Faken

+0

'at' utilizza le eccezioni per indicare l'errore fuori intervallo. Non lo userei in questo semplice caso. –