Je traverse un analyseur de base pour le code C ++ qui extrait des informations sur les classes du code d'entrée. Pour cela, j'ai une méthode qui recherche des membres de données à partir d'une position d'itérateur jusqu'à ce qu'elle rencontre certaines cordes telles que "publique", "protégée", "};". Les chaînes sont transmises dans un vecteur car je dois également utiliser la fonction pour d'autres points d'arrêt et que le nombre de cordes ne peut pas être corrigé. Comment puis-je obtenir les éléments d'un vecteur à l'intérieur de la condition d'une boucle lorsque je ne sais pas à l'indice d'arrêt?
Il ressemble à quelque chose comme ceci: où la valeur finale pourrait être n'importe quoi. P> est-ce possible?
J'espère que j'ai bien expliqué ma requête bien. J'utilise des itérateurs dans le code. Abscriptions utilisées uniquement pour expliquer ma requête. P> Merci! P> P>
3 Réponses :
S'il est vérifiant qu'un élément n'existe pas entre un Démarrer CODE> Position et une position Code> Terminer Code>, vous pouvez utiliser:
bool not_present(size_t start, size_t finish, value_type value, const ContainerType& vect)
{
for (size_t i = start; i <= finish; ++i)
{
if (value == vect[i]) return false;
}
return true;
}
Pourquoi n'utiliseriez-vous pas trouver code> pour cela?
@LighessRacesinorbit OP a un index dans un vecteur code> pour une position de finition (j'ai généralisé une position de départ), semblait donc plus simple de procéder de cette façon
std :: Recherche (Vec.begin (), Vec.begin () + N, valeur) == Vec.end () Code>?
Votre version utilise également une plage entièrement fermée qui n'est pas idiomatique!
@LightnessRacesinorbit L'OP utilise des gammes entièrement fermées.
Je réalise que, mais le même commentaire à eux: P Une fonction réutilisable comme celle-ci ne devrait pas
@LightnessSracacesinorbit Bien sûr et utiliser toutes les capuchons d'un nom de variable est loin d'être acceptable dans le code de qualité industrielle, mais donné que nous traitons avec l'enseignement du concept fondamental de la réduction de l'effondrement N code> dans une boucle que je pensais que de petites étapes ont été jugées préférable.
Ne pas entièrement en désaccord. Juste noter!
Dans les commentaires, vous êtes inquiet "Je devrais faire itérair le vecteur à l'intérieur de la condition de boucle", mais toute implémentation em> devra passer par chaque élément pour vérifier qu'il peut continuer. Votre condition de boucle peut être exprimée comme «Arrêtez-vous si nous trouvons a code> dans
vect code>", et nous pouvons voir qu'il y a une belle
std :: Trouver code>
déjà dans
std :: Recherche code> renvoie un itérateur pointant sur l'endroit où il a trouvé l'élément, ou
fin code> s'il ne l'a pas trouvé. P>
while(std::find(vect.begin(), vect.end(), a) == vect.end()) {
//loop body
}
La solution était assez simple cependant. Mon esprit était juste coincé à "itérer à travers le vecteur dans la condition de boucle" qui était le coupable.
C'est ce que j'ai fait: p>
std :: Trouver Code> Votre ami est votre ami.
std :: vecteur :: taille () code>?
@Zivs a pensé à ce sujet mais encore une fois, je devrais faire itération à travers le vecteur à l'intérieur de la condition de boucle.
Pourquoi I> Devez-vous itérus sur le vecteur? Peut-être avez-vous besoin
std :: Rechercher code>
au lieu destd :: Trouver code>
? Quel est le problème réel i> vous devez résoudre? Quelle est la raison derrière la boucle?@Some programmateur mec j'ai mis à jour la question.
Vous savez que votre condition
pendant code> ne doit pas nécessairement être des comparaisons simples, non? C'est juste une expression booléenne. Qui peut toujours être un appel de fonction qui retourne
bool code>, où vous transmettez une référence au vecteur et la valeur, et que la valeur C ++ entièrement indépendante iTère sur le vecteur et vérifiez s'il contient une valeur et retourne vrai ou faux, selon que la valeur existe dans le vecteur.
obtenu la solution. Merci beaucoup tout le monde.
@Hassaan Lorsque vous arrivez à une solution qui n'était pas dans une réponse, vous devriez écrire une réponse et nous dire quelle était cette solution. Juste dire "obtenu la solution" n'aide personne .