0
votes

Ne peut pas retourner vecteur par valeur dans le CPP

avoir ceci: xxx

devrait donner des éléments uniques de vecteur, mais si je l'exécute: foo.cpp: xxx

pas de valeur unique, qui doit être obtenu par origine = unique (mots); et le résultat d'en haut devrait être abc . Je ne suis pas sûr, si casse ne casse que dans le bloc si de la boucle interne pour la boucle (qui est intimé). Quelqu'un peut-il aider?


1 commentaires

pause casse la boucle la plus intérieure, mais le reste de votre question est la salade de mot; Je ne peux pas dire ce que vous demandez (et il semble avoir rien à voir avec le titre).


3 Réponses :


0
votes

pause code> prend finira la boucle la plus interne que celle-ci est située dans laquelle il se trouve, ce qui est dans ce cas votre premier code imbriqué pour code> boucle.

if(j>=len){
            Info info{vec[i].word, 0};
            ret.push_back(info);
        }


0 commentaires

1
votes

pause code> est utilisé pour rompre de la boucle non du si code> condition donc oui pause code> casse à partir de la boucle interne. Ce sera une approche plus facile de vérifier la valeur dans RET Vector si elle existe, ne le poussez pas.

vector<Info> unique(vector<Info> &vec){
    vector<Info> ret;
    size_t len = vec.size();

    for(int i=0; i<len; i++){
       boolean exists = false;
       for(int j = 0; j < ret.size(); j++){
         if(vec[i].word == ret[j].word){
           exists = true;
           break;
         }
       }
       if(!exists){
        Info info{vec[i].word, 0};
        ret.push_back(info);
       }
    }
    return ret;
}


2 commentaires

Cela fonctionne, mais pourquoi n'a pas travaillé par la version originale? Le point était que si la boucle interne ne finissait pas (à cause de pause ), la variable j était plus petite que len ( J << Code> LEN ), et donc, il y avait dupliquer (sinon aucune pause et crée de nouvelles informations). C'est assez facile, alors où était le problème? Le Break Comme vous le suggérez de pause de la boucle innertost pour (int J ...) , ce qui est toujours logique pour ma version précédente (la condition est après Le plus intérieur la plus boucle), alors encore une fois, où était Bug de la version précédente ????


Le problème est que vous comparez l'élément à lui-même, alors peu importe ce qu'il va toujours casser. Regardez l'exemple abcbc lorsque vous commencez par i = 0 et j = 0 Vous comparez Vec [0] == VEC [0] qui sera vrai. et vous faites la même chose pour tous les autres éléments c'est pourquoi le vecteur de ret était vide



0
votes

Les deux i et j index sur tout le vecteur.

Ainsi, vous comparez le premier élément à lui-même sur la première itération, le deuxième élément à lui-même sur la deuxième itération, et ainsi de suite jusqu'à ce que vous ayez comparé tous les éléments à lui-même et que tous les ont trouvés égaux à quelque chose.
À cause de cela, rien n'est ajouté à RET .

Je pense que la solution la plus simple est de comparer les éléments de Vec aux éléments de RET à la place.


0 commentaires