avoir ceci: devrait donner des éléments uniques de vecteur, mais si je l'exécute:
foo.cpp: p> pas de valeur unique, qui doit être obtenu par origine = unique (mots); code> et le résultat d'en haut devrait être
abc code>. Je ne suis pas sûr, si
casse code> ne casse que dans le bloc code> si code> de la boucle interne pour la boucle (qui est intimé). Quelqu'un peut-il aider? P> p>
3 Réponses :
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);
}
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;
}
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 code>), la variable
j code> était plus petite que
len code> (
J code> << Code> LEN CODE>), 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 code> Comme vous le suggérez de pause de la boucle innertost
pour (int J ...) code>, ce qui est toujours logique pour ma version précédente (la condition est après B> 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 code> lorsque vous commencez par
i = 0 code> et
j = 0 code> Vous comparez
Vec [0] == VEC [0] code> 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
Les deux 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. Je pense que la solution la plus simple est de comparer les éléments de i code> et
j code> index sur tout le vecteur. p>
À cause de cela, rien n'est ajouté à RET code>. P>
Vec code> aux éléments de
RET code> à la place. p>
pause code> 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).