vecteur de vecteur ou pointeur de pointeur

vecteur de vecteur ou pointeur de pointeur - C++ - Programmation

Marsh Posté le 31-03-2013 à 19:34:23    

Bonjour à tous,
 
J'ai besoin de coder un graphe avec une matrice.  
J'ai deux classes Noeud.h et Lien.h
Les cases de la matrice correspondent à des objets de type Lien. Chaque case correspond donc à un lien entre deux nœuds.
Pour ce faire, j'ai essayé avec tab des pointeurs Lien ** tab mais j'arrive pas à terminer cet essai car je ne connais pas le nombre de lignes et de colonnes. En fait, ces nombres correspondent au nombre des nœuds dans le graphe qui est n'est pas stable. Donc, est ce que je peux utiliser vector< vector<Arc> >  pour résoudre ce problème.
 
Le code de la classe Graphe que je veux le modifier s'il ne convient pas.
 

Code :
  1. #ifndef Graphe_H
  2. #define Graphe_H
  3. #include<iostream>
  4. #include<string>
  5. #include <vector>
  6. #include "Noeud.h"
  7. #include "Lien.h"
  8. using namespace std;
  9. class Graphe
  10. {
  11. private :
  12. vector<Noeud*> vecNoeuds;
  13. public :
  14. Lien** matLiens;
  15. string nom;
  16. Graphe(string);
  17. Graphe(const Graphe& );
  18. void ajouterNoeud(Noeud* n);
  19. void ajouterLien(Noeud NoeudDépart,Noeud NoeudArrivé,string attr);
  20. void afficher();
  21. ~Graphe();
  22. };
  23. #endif


 
Remarque :
 
je suis entrain de coder un problème d'optimisation ou le temps d'exécution est indispensable.
 
Merci d'avance.
 

Reply

Marsh Posté le 31-03-2013 à 19:34:23   

Reply

Marsh Posté le 01-04-2013 à 10:41:47    

svp j'ai besoin de votre aide

Reply

Marsh Posté le 01-04-2013 à 13:37:05    

Si tu ne connais pas la taille de ton tableau, je pense qu'utiliser des vector est une bonne solution


---------------
Ta peau de nacre noir, la courbe de ton cul
Reply

Marsh Posté le 01-04-2013 à 14:41:45    

si on utilise vector <vector<Lien *>> comment je peut coder mon constructeur par défaut.

Reply

Marsh Posté le 01-04-2013 à 14:47:10    

tu n'as rien à faire. le vector sera vide à la construction de ton objet Graph


---------------
Ta peau de nacre noir, la courbe de ton cul
Reply

Marsh Posté le 01-04-2013 à 15:42:33    

et pour le lien* je ne dois pas faire une allocation dynamique dans le constructeur?
Et pour mon destructeur que dois je faire?
 
et autre question svp : j'ai un pointeur ici sur des objets de type Lien. Est ce que je peux ne pas l'utiliser? et juste mettre vector<vector<Lien>>.
Remarque: la notion d'héritage et de polymorphisme sera présente dans mon travail.

Reply

Marsh Posté le 01-04-2013 à 17:56:02    

Ben un container peut contenir n'importe quel type de variable, donc oui tu peux faire vector<vector<Lien>>.
 
Et un Lien n'est pas simplement une structure avec trois variables? (les nœuds qu'il relies + le coût)


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 01-04-2013 à 18:11:11    

je le declare comme etant une classe  

Code :
  1. class Lien
  2. {
  3. private :
  4. Noeud n1;
  5. Noeud n2;
  6. public :
  7. Lien();
  8. Lien(Noeud no1, Noeud no2);
  9. Noeud getNoeud1();
  10.     Noeud getNoeud2();
  11. void setNoeud1(Noeud no1);
  12. void setNoeud2(Noeud no2);
  13. void afficher();
  14. ~Lien();
  15. };
  16. #endif


 
En fait c'est une classe mère qui a deux classes dériveés.  
 
et pour Lien* pourquoi non?

Reply

Marsh Posté le 01-04-2013 à 18:16:30    

Si tu as absolument besoin du polymorphisme, alors il faut absolument utiliser un pointeur (ou une ref quand tu peux), maintenant je vois mal pourquoi tu aurais besoin de classes hérités de Lien, surtout que n1&n2 sont en private, le destructeur n'est pas virtual ni la fonction d'affichage (et pense à faire passer no1/no2 en ref constante, ça évite des copies).


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 01-04-2013 à 18:37:50    

j'ai deux classes filles qui héritent de la classe mère Lien.h. En fait, je suis entrain de coder un graphe qui représente une requête SQL. Et dans une requête SQL on peut trouver des liens de jointures des liens qui représentent une appartenance...pour moi ces liens sont des sous classes de la classe mère Lien. Je réfléchit de cette façon parce que :
  ma matrice comporte des objets instances de ces deux classes filles donc possèdent des instances de différents types. Par contre, un vector contient des objets de même type et pour que je puisse utiliser vector j'utlise l'héritage.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed