Non, il va juste comparer les 2 itérateurs. Mais bon, ça ne marche pas pour tous les itérateurs. Pourquoi ne pas faire un != au fait ?
Non, il va juste comparer les 2 itérateurs. Mais bon, ça ne marche pas pour tous les itérateurs. Pourquoi ne pas faire un != au fait ?
Question idiote, où retrouver la définition du template sous solaris ?Envoyé par Miles
![]()
Effectivement, cela résoudrait pas mal le problème ... je vais voir.Envoyé par Miles
Au temps pour moi, c'est bien un != qu'il fallait utiliser...Envoyé par poukill
![]()
Ok, donc, le bout de code qui correspond à l'appel de "distance" est le suivant :
La fonction renvoie la position où se trouve l'occurence à chercher, et -1, si celle-ci n'existe pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 int MTE::cherche_corr(int posdepart, std::string corresp){ std::vector<struct ligne_valeurs>::iterator iter = tableau_vals.begin() + posdepart; while (iter != tableau_vals.end ()) { if(std::distance(tableau_vals.begin(),iter) > std::distance(tableau_vals.begin(),tableau_vals.end())) {return(-1);} if(iter -> correspondance.find(corresp) != -1) {break;} ++iter; } if(iter!=tableau_vals.end()){ return(std::distance(tableau_vals.begin(),iter));} else{return(-1);} }
J'ai besoin de la position, j'ai donc absolument besoin de "distance".
Autre solution : Je fonctionne avec un système d'incrément parallèle (un bête entier i que je fais incrémenter en même temps que j'incrémente l'itérateur).
Qu'en pensez-vous ?
Ton if qui pose problème n'est pas redondant avec la protection que tu as à l'entrée de ton while ?
AMHA oui... très certainement!
Au passage, tu ne fais aucuns test sur posdepart...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 int MTE::cherche_corr(int posdepart, std::string corresp){ std::vector<struct ligne_valeurs>::iterator iter = tableau_vals.begin() + posdepart; while (iter != tableau_vals.end ()) { if(iter -> correspondance.find(corresp) != -1) {return std::distance(tableau_vals.begin(), iter);} ++iter; } if(iter!=tableau_vals.end()){ return(std::distance(tableau_vals.begin(),iter));} else{return(-1);} }
Ok, j'avais du rajouter cette condition suite à des problemes post compilation, je vais voir ce que cela donne à présent (Pourquoi n'ai je pas pensé au return plutot qu'au break ! Je vous jure ..)
Parce qu'on ne peut pas penser à tout, sinon les forums n'existeraient pas![]()
Tout à fait
Cela dit, l'erreur est toujours présente![]()
Où puis-je trouver le fichier qui décrit le template "distance", ceci afin de vérifier qu'il a bien été défini ? Puis je le redéfinir dans le programme directement ?
Il est dans le header iterator normalement.
Bon, je me demande si j'ai la possibilité de toucher à ce header là.
Peut-on créer le template directement ? (auquel cas je le renommerai, pour ne pas créer de conflit avec le template "distance" existant)
Si oui, où le placer dans le projet ? dans le .h avec les déclarations de classes ?
Cette écriture me gêne pas mal.Envoyé par Thordax
Pas parce que le second appel correspond à tableau_vals.size(), mais parce que :
- Si tu as un vecteur, alors la contiguité t'autorise à tester avec >
- Si tu as autre chose, ton test est inutile. Si tu as dépassé, tu est déjà foutu car dans les chous et les distances que tu obtiendras n'auront aucun sens.
Bref, si tu as une boucle un peu particulière qui fait que tu "sautes" des éléments, alors incrémente deux données : ton itérateur de position courante, et un index que tu compareras à size().
Quand à la définition de la fonction, cela va dépendre de ton installation. Tu peux p.ex. définir un main.cpp qui tente de construire un vecteur sur un type non copiable. Il y a des chances que ta ligne d'erreur indique le fichier de définition de la classe vecteur. De là tu fouilles pour retrouver std::distance.
Et non, tu ne pourras (et ne devras) pas patcher le fichier.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager