J'ai un std::list<double> foo;
J'utilise
if (foo.size() >= 2){
double penultimate = *(--foo.rbegin());
}
mais cela me donne toujours une valeur arbitraire de penultimate
.
Qu'est-ce que je fais de mal ?
J'ai un std::list<double> foo;
J'utilise
if (foo.size() >= 2){
double penultimate = *(--foo.rbegin());
}
mais cela me donne toujours une valeur arbitraire de penultimate
.
Qu'est-ce que je fais de mal ?
Plutôt que de décrémentation rbegin
vous devez l'incrémenter, comme indiqué ici : 1
double penultimate = *++foo.rbegin();
comme rbegin()
renvoie un itérateur inverse donc ++
est l'opérateur qui se déplace en arrière dans le conteneur. Notez que j'ai également supprimé les parenthèses superflues : ce n'est pas du goût de tout le monde.
Actuellement, le comportement de votre programme est indéfini puisque vous déménagez en fait à end()
et vous n'êtes pas autorisé à le déréférencer. La nature arbitraire de la sortie est une manifestation de ce comportement indéfini.
1 Conservez le contrôle de la taille minimale que vous avez actuellement.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.