Bonjour à tous,
Je vais essayer de vous poser le contexte:
Dans le cas d'un projet visant à calculer le chemin critique d'une liste de taches, j'en suis ramené à ça :
j'ai créé une classe tache :
Avec _next et _prev qui contiennent le nom des taches successeurs et prédécesseurs correspondantes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 class Task { private: std::string _name; unsigned int _duration; std::vector<std::string> _next; std::vector<std::string> _prev; public : get/set }
Puis je me suis dis que se serait plus simple pour la suite du projet de passer à ça :
Avec _next et _prev qui contiennent des pointeurs vers les taches successeurs et prédécesseurs correspondantes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 class Task { private: std::string _name; unsigned int _duration; std::vector<Task*> _next; std::vector<Task*> _prev; public : get/set }
J'ai créé : std::list<Task> project qui correspond à l'ensemble des taches.
Voila j'ai résumé et je pense avoir perdu personne; on en vient au problème :
Une fois qu'une tache est terminée je cherche à présent à la supprimer de l'ensemble du projet (dans la liste de taches "project" et dans des prédécesseurs des autres taches)
Comment je pourrai faire dans cette fonction pour supprimer la tache nommée TaskNameToDelete en tant que Task dans la liste mais aussi en temps que prédécesseur dans _prev?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 void deleteTask(std::string TaskNameToDelete, std::list<Task>& project) { }
J'ai essayé ça, le problème c'est que en supprimant la tache (ligne 7) les pointeurs vers cette tache dans les prédécesseurs prennent une valeur "<Ptr> Invalid"
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
20
21
22 void deleteTask(std::string TaskName, std::list<Task>& project) { std::list<Task>::iterator it = project.begin(); std::vector<Task*>::iterator Predecessor; it = project.erase(it); // la première tache de la liste est bien celle à supprimer it = project.begin(); while (it != project.end()) { Predecessor = it->getPrev().begin(); while (Predecessor != it->getPrev().end()) { if ((*Predecessor) == NULL) { it->getPrev().erase(Predecessor); } Predecessor++; } it++; } }(moi je pensais qu'il allait prendre la valeur NULL ou encore mieux etre supprimer des vectors !)
J'espère avoir été clair, si quelqu'un peut m'éclairer par une idée je suis preneur.
Merci encore.
Partager