IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Equivalent d'un vector de Java ?


Sujet :

C

  1. #1
    Membre averti Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Points : 301
    Points
    301
    Par défaut Equivalent d'un vector de Java ?
    Salut a tous !

    Bon ben voila tout est dans le titre, y'a t'il en C une structure comme les vecteurs en Java ? Je peux toujours rêver je suppose . . .

    Sinon, j'ai un problème de conception, je m'explique :

    Je dois parcourir un graphe composé de noeud et d'arcs.

    En fonction d'un noeud de départ et d'un parcours (aba, par exemple) (j'ai oublié de préciser que les arcs sont étiquettés par des lettres) je dois trouver tous les noeuds correspondants .

    J'ai donc fait un fonction

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    NoeudRetour rechercheImage(char parcours, Noeud depart)
    {
      int i = 0;
      int nb_noeud = 0;
      NoeudRetour tab_resultat = malloc(sizeof(struct noeudRetour));
      tab_resultat->Tableau_noeud = malloc(sizeof(Noeud));
     
      if (tab_resultat == NULL)
        {
          perror("- Fonction rechercheImage : Erreur allocation memoire tableau resultat \n");
          return NULL;
        }
     
      if ( tab_resultat->Tableau_noeud == NULL)
        {
          perror("- Fonction rechercheImage : Erreur allocation memoire sous tableau resultat \n");
          return NULL;
        }
     
      for (i = 0; i < depart->Nombre_d_arcs_sortants; i++)
        {
     
          if ( (((depart->Arcs_sortants)[i])->Action)[0] == parcours)
    	{
    	  (tab_resultat->Tableau_noeud)[nb_noeud] = ((depart->Arcs_sortants)[i])->Destination;
    	  tab_resultat->Tableau_noeud = realloc(tab_resultat->Tableau_noeud, sizeof(Noeud) * (nb_noeud + 1));
    	  nb_noeud ++;
     
    	  if (tab_resultat->Tableau_noeud == NULL)
    	    {
    	      perror("- Fonction rechercheImage : Erreur reallocation memoire sous tableau resultat \n");
    	      return NULL;
    	    }
    	}
        }
     
      tab_resultat->Nb_retour = nb_noeud;
      return tab_resultat;
    }
    Je vous met les structures qui vont avec :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    typedef struct arc *Arc;
    typedef struct noeud *Noeud;
    typedef struct graphe *Graphe;
    typedef struct noeudRetour *NoeudRetour;
     
    struct noeud{
     
      char *Nom;
      char *Proprietes;
      int Nombre_de_proprietes;
      Arc *Arcs_sortants;
      int Nombre_d_arcs_sortants;
     
     
    };
     
    struct noeudRetour{
     
      int Nb_retour;
      Noeud *Tableau_noeud;  
     
    };
     
    struct arc{
     
      Noeud Destination;
      char *Action;
     
    };
     
     
    struct graphe{
     
      Noeud Depart;
      int Nombre_de_noeuds;
      Noeud *Tableau_noeud;
     
    };
     
    #endif
    Mon problème : je veux faire une fonction qui prenne en paramètre un Noeud de départ, une chaine de caractère représentant un chemin dans le graphe par exemple "abab" et j'aimerais que cette fonction apelle 4 fois la fonction que j'ai au dessus, mais j'ai du mal a voir comment et ou récupérer le retour de la fonction, si je dois faire un tableau, comment je dois faire mes boucles etc . . . En espérant avoir été clair, merci d'avance
    define: Programmeur : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Il y a deux très très grandes différences en Java et C :

    1°) Java est managé, pas C, pour ton problème c'est encore pas trop grave...

    2°) Java est Orienté Objet, pas C, les Vectors sont une conception typiquement OO... dans l'absolue, tu peux faire un tableau mais sa gestion sera assez complexe, et très loin des vector Java...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  3. #3
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    La STL de C++ comprend une implementation de vector

    En C, on peut se créer une liste chainée ou un tableau retaillé par realloc.
    Sinon, une fois j'ai fait une liste chainée de tableaux de taille fixe (empeche de faire un malloc à chaque fois), mais c'était assez complexe, je sais pas si les vectors de la STL marchent comme ça.

  4. #4
    Membre averti Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Points : 301
    Points
    301
    Par défaut
    Y'a pas moyen de se faire un petit module qui imiterait les fonctionnalités des vectors ? Je sais bien que Java est OO et tout ce que ça implique, mais la j'ai le même projet a faire en C et en Java, en java c'est tranquille par contre en C . . . et je regrette les vectors c'est tout
    define: Programmeur : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.

  5. #5
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    comme je te l'ai dis, tu peux faire une structure et un ensemble de fonctions qui permettront de simuler le comportement des vectors, mais ça risque d'être assez peu pratique... et complexe...

    @Gruik : les vectors de la STL C++ fonctionnent généralement avec des réallocations exponentielles
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  6. #6
    Membre averti Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Points : 301
    Points
    301
    Par défaut
    Yep merci mais comme tu le dis ça risque d'être complexe et en C je suis pas une "flèche" on va dire

    Je sais pas comment faire c'est embetant
    define: Programmeur : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.

  7. #7
    mat.M
    Invité(e)
    Par défaut
    Prends std::vector dont parle Gruik ; c'est assez souple d'emploi tu n'as pas forcément besoin d'être expert en C++ pour l'utiliser.

    MaClasse maclasse;// ou bien ma structure :-)
    std::vector<MaClasse> vectMaClasse;
    maclasse.Initialisation();
    vectMaClasse.push_back(maclasse);

    Désolé pour le code C++ dans le forum C

  8. #8
    Membre averti Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Points : 301
    Points
    301
    Par défaut
    Yep merci mais c'est un projet pour la fac et pas le droit de se servir du C++
    define: Programmeur : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.

  9. #9
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    réallocations exponentielles
    En plus simple il multiplie l'espace par deux à chaque réallocation.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  10. #10
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Citation Envoyé par seriousme
    En plus simple il multiplie l'espace par deux à chaque réallocation.
    pas forcément 2, mais 1.1 par exemple, enfin, ça dépend des implémentation, et comme chaque (version de) compilateur a la sienne
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  11. #11
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    pas forcément 2, mais 1.1 par exemple, enfin, ça dépend des implémentation, et comme chaque (version de) compilateur a la sienne
    La base de l'exponentielle est elle toujours constante?
    En effet si il y a 10 éléments au début et qu'il y a débordement multiplier l'espace par 4 paraît raisonnable mais si il y en a 1 million multiplier par 1.1 ou même moins semble plus raisonnable que par 4.
    Qu'en est-il en réalité?
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  12. #12
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    ça dépend des implémentations, je ne peux pas te certifier que c'est constant ou non, ni même que logarithmique ou exponentiel, d'une part parce que je connais pas la norme par coeur, et ensuite, par ce qu'il y a une marge de liberté et que chaque compilateur a son implémentation...

    ensuite, il est plutôt logique que ce soit constant et proche de 1... mais je ne peux pas te l'assurer...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  13. #13
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Gruik : J'ai lu dans le livre de C++ de Deitel et Deitel que les std::deque étaient généralement implémentées avec des listes de tableaux de taille fixe.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Recherche equivalent à un JLayered pane de java
    Par daronmaster dans le forum Qt
    Réponses: 9
    Dernier message: 19/03/2008, 17h35
  2. List et Vector en java
    Par wsdl_adr dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 14/02/2008, 12h33
  3. equivalent du control FileUpload en JAVA
    Par hicham246 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 04/01/2008, 15h56
  4. Equivalent listbox et treeview en Java
    Par AsmCode dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 05/03/2007, 22h17
  5. [Mac] Equivalents de Delphi, Pascal, C, Java, etc ?
    Par cyberjoac dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 02/04/2006, 12h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo