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 :

[Débutant]générer un tableau contenant des valeurs de différents types


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Points : 59
    Points
    59
    Par défaut [Débutant]générer un tableau contenant des valeurs de différents types
    Hello tout le monde, ma question est relativement simple,

    je cherche à créer un tableau (donc j'imagine un vector de vector) dans lequel on aura, en prenant une ligne :

    sur la premiere colonne, un entier,
    sur la deuxieme colonne, un deuxieme entier,
    sur la troisieme colonne une chaine de caractères string,
    sur la quatrieme colonne une autre chaine de caractères string,

    comment peut on créer ce type de tableau ? d'autre part, comment pouvoir rajouter une ligne dans le tableau créé ?

    doit on faire une sorte de boucle for de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for(int i=0;i<nb_de_lignes;i++){
    mon_tableau[i].push_back(entier1);
    mon_tableau[i].push_back(entier2);
    mon_tableau[i].push_back(chaine1);
    mon_tableau[i].push_back(chaine2);}
    cela fonctionnerait il ? y a-t-il une maniere plus élégante (donc plus Cppesque) de procéder ?

    Merci pour vos réponses !

  2. #2
    Membre du Club Avatar de Seandest
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Avril 2006
    Messages : 54
    Points : 67
    Points
    67
    Par défaut
    Salut, un tableau de structures non ?

  3. #3
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Points : 59
    Points
    59
    Par défaut
    ok pour le tableau de structures, du coup je crée une structure à la mode Cesque ?
    genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct ma_structure
    {
    int entier1;
    int entier2;
    std::string chaine1;
    std::string chaine2;
    };
    et apres je créé mon vecteur en faisant : std::vector<ma_structure> mon_tableau ?

    et apres, pour rajouter l'élément, je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for(int i=0;i < nb_lignes;i++){
    mon_tableau[i][entier1] = valeur1;
    mon_tableau[i][entier2] = valeur2;
    mon_tableau[i][chaine1] = valeur_chaine1;
    mon_tableau[i][chaine2] = valeur_chaine2;}
    ca marcherait ? j'ai pas encore testé tout ca, c'est plutot long à implémenter

  4. #4
    Membre du Club Avatar de Seandest
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Avril 2006
    Messages : 54
    Points : 67
    Points
    67
    Par défaut
    C'est pas un truc dans ce genre là que tu veux ?

    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
    struct MaStructure
    {
        int Entier1;
        int Entier2;
        char* ch1;
        char* ch2;
    };
     
    MaStructure s_tableau[10];
    
    for(int i = 0; i < 10; i++)
    {
         s_tableau[i].Entier1 = ... ;
         s_tableau[i].Entier2 = ... ;
         s_tableau[i].ch1 = new char[strlen(chaine1) + 1];
         strcpy(s_tableau[i].ch1, chaine1);
         s_tableau[i].ch2 = new char[strlen(chaine2) + 1];
         strcpy(s_tableau[i].ch2, chaine2);
    }
    

  5. #5
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Points : 59
    Points
    59
    Par défaut
    oui, ca doit pouvoir marcher, même si je ne suis pas tres fan des char * en général (en remplacant par des strings) et en remplacant la boucle for par un itérateur approprié, ca doit pouvoir le faire

    au fait, peut-on faire

    iter -> first puis iter-> second puis iter->third et enfin iter->fourth pour appeler à chaque fois la premiere, deuxieme, troisieme et quatrieme colonne de la ligne associée à notre tableau ?

  6. #6
    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 Thordax
    iter -> first puis iter-> second puis iter->third et enfin iter->fourth pour appeler à chaque fois la premiere, deuxieme, troisieme et quatrieme colonne de la ligne associée à notre tableau ?
    si tu définie ta struct/class de manière à ce que chaque valeur soit désignée par first, second, third et fourth, oui
    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)

  7. #7
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Points : 59
    Points
    59
    Par défaut
    si je comprends bien, telle que ma struc est définie dans la réponse #2,

    je peux écrire vector[i] -> entier1 et acceder au champ correspondant au premier entier ?

    (désolé pour ces questions bateaux mais j'ai beaucoup de lacunes )

  8. #8
    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
    plutôt vector[i].entier1
    puisque tu stockes des instances de la classe, et pas des pointeurs mais effectivement, c'est celà ^^
    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)

  9. #9
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    au fait, peut-on faire

    iter -> first puis iter-> second puis iter->third et enfin iter->fourth pour appeler à chaque fois la premiere, deuxieme, troisieme et quatrieme colonne de la ligne associée à notre tableau ?
    Non, first second third et fourth ne signifient rien pour les itérateurs ni pour quoi que ce soit en C++. Tu n'accèdes pas à des colonnes ici, mais simplement aux membres de la structure que tu stockes.

  10. #10
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Points : 59
    Points
    59
    Par défaut
    merci a tous pour vos réponses si rapides ! je reviendrai plus souvent je crois

  11. #11
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Points : 59
    Points
    59
    Par défaut
    ben zutte c'est étonnant, lorsque je fais la commande :

    tableau_valeurs.num_terminal = 1;

    dans une méthode ou tableau_valeurs est appelé en tant que référence (préfixe "&" en parametre de la méthode) le compilo me sort :

    invalid use of undefined type `struct ligne_valeurs'

    et ma structure est déclarée comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct ligne_valeurs
    {
    int num_terminal;
    int timestamp;
    std::string parametre;
    std::string correspondance;
    };
    Une idée du pourquoi du comment ?

  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
    tu as bien inclus le .h déclarant ta structure dans le fichier déclarant la fonction qui prend tableau_valeur en paramètre ?
    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
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Points : 59
    Points
    59
    Par défaut
    au temps pour moi, la structure était déclarée dans le .c ...

  14. #14
    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
    Citation Envoyé par Seandest
    C'est pas un truc dans ce genre là que tu veux ?

    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
    struct MaStructure
    {
        int Entier1;
        int Entier2;
        char* ch1;
        char* ch2;
    };
     
    MaStructure s_tableau[10];
    
    for(int i = 0; i < 10; i++)
    {
         s_tableau[i].Entier1 = ... ;
         s_tableau[i].Entier2 = ... ;
         s_tableau[i].ch1 = new char[strlen(chaine1) + 1];
         strcpy(s_tableau[i].ch1, chaine1);
         s_tableau[i].ch2 = new char[strlen(chaine2) + 1];
         strcpy(s_tableau[i].ch2, chaine2);
    }
    
    Le problème est la rigidité d'une structure.
    Implémenter des structures de données plus complexes comme une liste doublement chaînée n'est pas difficile et permet une grande souplesse:
    tous les types(en implémentant des listes templates), ajout, retrait d'éléments...
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  15. #15
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Regarde aussi du côté de boost::any
    En fait, il n'existe pas d'équivalent pour les classes à l'union du C.

  16. #16
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Points : 59
    Points
    59
    Par défaut
    le probleme, c'est le rajout des éléments d'un vector, il semblerait que la commande :

    tableau_valeurs[i].entier1= valeur1;

    soit "risquée", puisque mon compilo plante à cet endroit la. Dois je faire un resize ? (si je fais un resize, comme je ne connais pas la taille de mon tableau, c'est également une mauvaise solution, n'est ce pas ?)

    Peut on faire un push_back, auquel cas les problemes de mémoire disparaitront ?

  17. #17
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Peut on faire un push_back, auquel cas les problemes de mémoire disparaitront ?
    Tout à fait. Mais c'est ce que tu faisais déjà non ?

  18. #18
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Points : 59
    Points
    59
    Par défaut
    en fait tout est un probleme de syntaxe, je crois :

    j'écris ca pour l'instant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    tableau_valeurs[i].num_terminal = 1;
    tableau_valeurs[i].timestamp = tab_c[i].first;
    tableau_valeurs[i].parametre = tab_parametres[j].first;
    tableau_valeurs[i].correspondance = tab_parametres[j].second;
    dois je donc écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    tableau_valeurs[i].push_back({1, tab_c[i].first, 
    tab_parametres[j].first, tab_parametres[j].second});
    ? soit les éléments de ma structure directement ?


    [EDIT] non ca ne marche pas non plus :

    struct 'ligne_valeurs' has no member named 'push_back'
    que faire

  19. #19
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Points : 59
    Points
    59
    Par défaut
    autocorrect :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ligne_valeurs temp;
    temp.num_terminal = 1;
    temp.timestamp = tab_c[i].first;
    temp.parametre = tab_parametres[j].first;
    temp.correspondance = tab_parametres[j].second;
    tableau_valeurs.push_back(temp);
    => marche

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [9i] Procédure PL/SQL pour générer un tableau contenant des dates
    Par nidhalBMC dans le forum PL/SQL
    Réponses: 2
    Dernier message: 27/05/2014, 12h24
  2. QTableModel contenant des objets de différents types
    Par saad.hessane dans le forum Qt
    Réponses: 3
    Dernier message: 22/08/2013, 13h58
  3. Réponses: 7
    Dernier message: 18/05/2011, 12h09
  4. tableau contenant des valeur "supprimé"
    Par rouxfab dans le forum Runtime
    Réponses: 6
    Dernier message: 15/07/2008, 09h05
  5. [FPDF] Tableau à une dimension contenant des valeurs
    Par kluck3000 dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 23/05/2008, 13h34

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