Quel est le code pour la deuxième à dernier élément dans un vecteur
Je suis en train de créer un programme qui utilise la deuxième à dernier élément dans un vecteur, jusqu'à présent, j'ai utilisé: (arr2.rbegin()+1)
Si j'utilise un opérateur de comparaison dans une condition telle que:
if(arr2.rbegin()+1 == true)
Je reçois un message d'erreur: 'no match for operator =='
arr2.rbegin()+1
est un itérateur, pas une valeur. Essayez d'utiliser*
:if (*(arr2.rbegin()+1) == true)
*(arr2.rbegin()+1)
ouarr2[arr2.size()-2]
- Dans ce cas, le type que vous obtenez lorsque déréférencement l'itérateur doit définir un opérateur approprié== ainsi.
Vous devez vous connecter pour publier un commentaire.
Beaucoup de réponses et de commentaires ont la bonne idée mais vraiment laid de la syntaxe. Voici deux belles façons de s'exprimer que.
Démo: http://ideone.com/2cZeUq
Cela fonctionne parce que RandomAccessIterator, qui
vector
a, est nécessaire pour fourniroperator[]
tels queit[n]
est équivalent à*(it + n)
, tout comme pour les pointeurs.Donc le code dans votre question devient juste
arr2.back()[-1]
?front()
etback()
donner des références, pas les itérateurs. L'arithmétique des pointeurs ne fonctionne pas sur des références. Vous pourriez faire(&arr2.back())[-1]
mais c'est plus laid que d'utiliser les itérateurs.regardant la documentation ici
http://www.cplusplus.com/reference/vector/vector/?kw=vector
Je m'attends à vous pour accéder à votre élément par
0
àsize()-1
, avecsize()-1
être le dernier. Donc l'avant-dernier estsize()-2
.Vous pouvez essayer de faire comme ceci:-
Cela dépend de ce que tu veux dire par "deuxième à dernier élément". Prendre la suite d'itérateur définition...
Vous avez à decriment l'itérateur deux fois parce que lorsque vous déclarez l'itérateur de "point" à la fin, en effet, il fait référence à l'emplacement APRÈS le dernier élément du vecteur.
N'oubliez pas que lorsque vous voulez que la valeur de l'itérateur de points, vous devez déréférencement d'elle. comme si...