J'utilise un std::vector
avec C++
pour stocker quelques éléments & les récupérer plus tard. Voici comment je parcours mon vecteur.Comment faire une boucle à travers un std :: vecteur dans les cycles répétitifs
std::vector<some_object> some_vector;
some_vector.resize(10);
for (auto it = some_vector.begin(); it != some_vector.end(); ++it) {
int current_it_index = std::distance(some_vector.begin(), it);
}
J'ai besoin de l'index par itération. Donc, en le récupérant par itération comme démontré ci-dessus.
Au-dessus de la boucle fonctionne bien mais je veux boucle à travers le vecteur dans les cycles infinis. Comment puis je faire ça?
Maintenant, je comprends que la question vient, Comment arrêtez-vous la boucle en cours d'exécution si vous le laissez fonctionner en répétant des cycles. Je pense à utiliser un std::atomic<bool>
comme une variable pour signaler & sortir de la boucle qui devrait fonctionner plutôt bien?
PS: Notez que j'ai pris std::vector
comme exemple de conteneur pour expliquer la question. Ce serait génial si la solution suggérée pouvait fonctionner sur std::array
ou d'autres conteneurs.
Une boucle 'while' simple ferait l'affaire. Ne le surchargez pas, il vous suffit d'envelopper votre boucle 'for' actuelle dans une boucle' while' qui vérifiera le 'std :: atomic'. Cependant, il pourrait être fait en utilisant seulement la boucle 'for' que vous avez déjà, vous avez juste besoin de changer deux choses: 1) Réinitialiser l'itérateur à la fin, 2) vérifier le' std :: atomique 'que vous avez mentionné afin de savoir quand arrêter. –
DimChtz
Voulez-vous que 'current_it_index' revienne à' 0' après avoir recommencé à parcourir le vecteur ou devrait-il continuer à augmenter? Aussi ce genre de sons ressemble à un problème XY. Si vous nous dites pourquoi vous faites cela, nous serons peut-être en mesure de vous indiquer quelque chose de différent. – NathanOliver
J'ai compris. 'pour (auto it = some_vector.begin(); ++ ++) { int current_it_index = std :: distance (some_vector.begin(), it); if (it == some_vector.end() -1) it = un_vector.begin(); } ' –