Bonjour,
voilà, j'ai un problème avec de vector, voilà en gros comment je marche:
J'ai 2 vectors : un de sommets, un autre d'arrete (de segment)
je parcours le vecteur d'arrete, si j'ai 2 segments qui se coupent, je supprime ces 2 Arretes et j'en crée 4 grâce au point d'intersection des 2 précédents.
Pour les rajouter, je fais comme ça:
ARRETE * N_A1 = new ARRETE(S, _A1->getP1());
ARRETE * N_A2 = new ARRETE(S, _A1->getP2());
ARRETE * N_A3 = new ARRETE(S, _A2->getP1());
ARRETE * N_A4 = new ARRETE(S, _A2->getP2());
L_A.erase(L_A.end() - (size + (i - 1)));
L_A.erase(L_A.end() - (size + (i - 1)));
L_S.resize(L_S.capacity() + 1);
L_A.resize(L_A.capacity() + 2);
L_A.push_back(N_A1);
L_A.push_back(N_A2);
L_A.push_back(N_A3);
L_A.push_back(N_A4);
L_S.push_back(S);
apparemment, ça marche bien, les resize() se font nikel.
Mais quand j'arrive sur le L_A.push_back(N_A1); ça plante, erreur mémoire.
bah G essayé avec size(), ça me donne la meme erreur.
Et je vois pas pkoi je ferais péter ma mémoire avec capacity(), au lieu de retourner le nombre d'éléments avec size(), il me retourne le nombre total d'éléments que je peux mettre.
Et ça la fait pas exploser puisque C au premier passage dans ce code que ça plante.
bah ça me sert que quand je fais mon erase(), ça me libère 2 éléments dans mon vector, don j'ai pas de problème pour rajouter 2 nouveaux élémentns, mais dèe que je dois en rajouter 1 un nouveau (donc à partir du 3ème G un debug assertion failed (précédé par un "user breakpoint called") sous Visual.
Donc je pensais que j'avais un problème avec mon vector qui voulait plus me gérer de dépassement sur mon vector. Mais apparemment C pas ça.
et pour les histoires de taille et capacité pour vector, essay de voir (dans ta tete) ce que ca fais quand tu fais un resize() en te servant de la capacité
ca fais un vecteur troué, et tu sais meme pas ou se trouve tes données
donc je te conseille (mais si c'est pas la ton probleme) de rester avec
si je fais le resize(), C le premier, si je le fais pas, C le 3eme
en gros, l'algo de gestion de mes vectors C ça:
Si Se_coupent(v_segment[i], v_segment[j])
nouveau segment 1;
nouveau segment 2;
nouveau segment 3;
nouveau segemnt 4;
//On considère que les 4 sont issus de la section du point d'intersection des 2 qu'on vérifie
v_segment.effacer(v_segment[i]);
v_segment.effacer(v_segment[j]);
v_segment.ajouter(1);
v_segment.ajouter(2);
v_segment.ajouter(3);
v_segment.ajouter(4);
FinSi
pour effacer quelque soit les indices i et j, fais plutot (si i<j)
v_segment.erase( v_segment.begin() + j );
v_segment.erase( v_segment.begin() + i );
et apres tu push_back, pourquoi tu voudrais faire un resize() ?
la seule chose à voir c'est le choix du conteneur, vector c'est pas ce qu'il y a de mieux pour faire des erase (dans ton cas tu pourrais faire une copie à la place des erase)