2010-06-16 4 views
5

Existe-t-il un moyen d'accéder à un élément sur un vecteur à partir de l'arrière? Je veux accéder à la dernière seconde element.currently j'utilise les éléments suivants pour y parvenir:accéder à un vecteur par l'arrière

myVector[myVector.size() - 2] 

mais cela semble lent et maladroit, est-il une meilleure façon?

Répondre

7

Pas susceptible d'être plus vite, mais cela peut sembler plus agréable:

myVector.end()[-2] 
+10

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

+0

@Pavel: J'aime cette solution la meilleure, elle a le plus de sens et a l'air très propre. – Faken

+0

Notez que le point de Ben à propos de ce n'est pas vraiment plus rapide s'applique, cependant. –

5

Eh bien, vous pouvez toujours utiliser vecteur :: retour(). Si vous voulez itérer à l'arrière, utilisez le reverse_iterator:

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

vecteurs sont faits pour un accès aléatoire rapide, donc votre chemin est très bien aussi. L'accès à un élément vectoriel à n'importe quel index est une opération O (1).

+4

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

+0

Merci, l'a réparé. – fingerprint211b

0

Votre chemin est parfaitement valide et assez rapide sauf que vous devez vérifier myVector.size() > 1.

+1

Ou je pourrais le faire comme myvector.at (myVector.end - 2) et le rendre encore plus lent. – Faken

+0

'at' utilise des exceptions pour indiquer une erreur hors plage. Je ne l'utiliserais pas dans ce cas simple. –

Questions connexes