Disons que j'ai un std::list<int> lst
Et quelques std::list<int>::iterator it
Pour parcourir la liste. Et cela dépendait de la valeur de it
Je veux utiliser it + 1
Ou it - 1
Dans mon code. Existe-t-il un bon moyen de le faire comme next()
, prev()
(je n'ai pas trouvé de telles choses dans la documentation stl)? Ou dois-je copier le it
à chaque fois et incrémenter (décrémenter) la copie?
Copier et incrémenter/décrémenter la copie est la seule façon de le faire.
Vous pouvez écrire des fonctions wrapper pour le cacher (et comme mentionné dans les réponses, C++ 11 a std :: prev/std :: next qui font exactement cela (et Boost définit des fonctions similaires). Mais ce sont des wrappers autour de cette "copie et incrémentez "l'opération, ainsi vous n'avez pas à vous soucier de le faire" mal ".
Oui, depuis C++ 11, vous recherchez les deux méthodes appelées std::prev
et std::next
. Vous pouvez les trouver dans la bibliothèque d'itérateurs.
Exemple de cppreference.com
#include <iostream>
#include <iterator>
#include <vector>
int main()
{
std::list<int> v{ 3, 1, 4 };
auto it = v.begin();
auto nx = std::next(it, 2);
std::cout << *it << ' ' << *nx << '\n';
}
Production:
3 4
Une solution simple pré-planifiée est prior
et next
de Boost.utility
. Ils profitent de operator--
et operator++
mais ne vous oblige pas à créer un temporaire.