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 :

tableau dynamique à 2 dimensions avec structure


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Avril 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 80
    Par défaut tableau dynamique à 2 dimensions avec structure
    Bonjour,

    J'ai bien fait toutes les recherches mais je n'ai pas trouvé exactement ce que je cherche. Je veux créer à l'aide de vector un tableau à 2 colonnes (fixe), mais dont le nombre de lignes peut varier.

    Struct[0][0] Struct[1][0]
    Struct[0][1] Struct[1][1]
    Struct[0][2] Struct[1][2]
    ...
    Struct[0][n] Struct[1][n]

    J'ai commencé par écrire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vector <structure> _structure[2]
    Le code est-il exact?
    La première ligne est automatiquement créée ou faut-il réaliser un premier push_back?

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Ca, c'est un tableau de vectors.
    Tu auras donc deux vectors, nommés _structure[0] et _structure[1], qui auront des tailles totalement indépendantes.

    Toi, tu veux un ensemble de paires de valeurs.

    Tu as plusieurs possibilités:
    • soit l'un des éléments de la paire est un identifiant et l'autre une valeur
    • soit les deux valeurs ne sont pas liées par cette sémantique clé/valeur


    Dans le premier cas, tu es dans le domaine des associations (ou dictionnaires).
    Si tu as besoin de rechercher, la ou les valeurs d'une clé, ce sont les maps qui t'intéresseront.
    Si les clés sont uniques, tu pourras utiliser std::map ou std::unordered_map.
    Sinon, regarde du coté des std::multimap ou std::unordered_multimap.
    Si tu ne fais que les parcourir, la map n'est pas forcément nécessaire

    Dans le second cas, tu n'as pas vraiment d'autre choix que d'écrire une classe (ou une structure) pour représenter ta paire.
    Ou utiliser std::pair<...>, mais au lieu d'avoir des noms clairs, tu auras .first et .second.
    Si tu es dans ce cas, je pense que tes lignes représentent quelque chose, qui mérite un nom (pour en parler) et donc un type dédié dans le code.

    Supposons que ce type soit Bidule.
    Partant de là, tu veux un ensemble de Bidule: regarde les collections de la STL, et notamment ce beau diagramme.

  3. #3
    Membre confirmé
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Avril 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 80
    Par défaut
    Merci pour ta réponse, je ne connaissais pas les paires de valeurs. Je suis quand même resté sur ce que j'avais écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vector <structure> _structure[2]
    car je n'ai pas vraiment besoin de le rendre générique, je l'utilise que dans un cas précis. En tout cas sa m'aura fait connaitre les collections de la STL

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    pourquoi garder [2], peux-tu avoir trois éléments dans le premier vecteur et douze dans le second?

    n'y a-t-il pas de lien entre le premier élément du premier vecteur et le premier élément du second?

  5. #5
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Par défaut
    Je rejoins éternel, même si tu veux travailler sur un cas précis ou le nombre de vectors est fixé à deux, tu peux utiliser un conteneur de la STL pour cela également, ce sera plus sécurisé avec un std::pair<std::vector<Structure>, std::vector<Structure>> qu'avec un tableau primitif.

    Tu dis que tu n'as pas besoin de le rendre générique, mais tu as besoin de prendre les bons réflexes de programmeur orienté objet n'est-ce pas ? Pour cela il y a des principes à respecter (connus sous l'acronyme SOLID). Le O de SOLID représente l'Open-closed principle : que ton code soit ouvert aux extension, fermé aux modifications. Ainsi, tu limites les difficultés potentielles, futures, si ton prochain exercice est par exemple de remédier à la même problématique avec 7 vecteurs. Dans ce sens, même la paire n'est pas une meilleure solution qu'un vecteur de vecteurs.

    Ce n'est jamais mal de répondre à un exercice de manière plus générique. Tu t’entraînes ainsi à un bien meilleur niveau

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Certes, mais ce n'est pas du tout mon conseil, qui est plutot std::vector<std::pair<structure, structure>>, voire même std::vector<std::tuple<structure, structure>>.

    Ainsi, tu as un ensemble de lignes contenant chacune deux valeurs, qui n'est pas du tout la même chose que deux ensembles de valeurs.

    Le vecteur de vecteur lui, est encore pire: les lignes non plus ne sont pas de la même taille.

    Pour un tableau 2D de longueur variable dans une direction, il faut effectivement un vector/list/deque dans la direction variable, et un array/tuple/pair ou une struct/classe dans la direction fixe.
    Les lignes signifient quelque chose, donc, elles méritent un nom, au minimum struct ligne ou typedef ... ligne_type.

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

Discussions similaires

  1. Réponses: 14
    Dernier message: 29/03/2014, 09h36
  2. Réponses: 4
    Dernier message: 19/12/2006, 20h06
  3. declaration d'un tableau dynamique 2 dimensions
    Par mike600river dans le forum C++Builder
    Réponses: 4
    Dernier message: 22/05/2006, 08h53
  4. tableau dynamique excel crée avec une macro
    Par alex_95 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 20/03/2006, 12h01
  5. Réponses: 1
    Dernier message: 09/03/2006, 17h25

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