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 :

Pb connu des tableaux 2D


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2011
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 11
    Points : 7
    Points
    7
    Par défaut Pb connu des tableaux 2D
    Bonjour,
    Je souhaiterais créer un tableau dynamique 2D avec la classe vector de la stl.
    Par Dynamique, j'entend que la taille de mon tableau n'est connu qu'à l'exécution.
    j'ai donc créer un tableau : std::vector< std::vector< float > > monTableau;

    que je remplis au fur et à mesure que j'avance dans mes boucle
    for (i)
    for(j)
    monTableau[i][j]+= Y+7;

    le pb c'est qu'il plante
    pou y remédier j'ai donc spécifié la taille
    j'ai donc créer un tableau : std::vector< std::vector< float > > monTableau(10,10);
    mais ça ne me semble pas très propre, donc j'aimerais avoir une meilleure solution surtout que 10,10 c'est vraiment un chiffre au hasard et je ne veux pas m'amuser a le changer a chaque modification de données
    Que faut il faire
    Taille i et taille j sont connus qu'à l'exécution

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Bonjour Catherine86 et bienvenue sur le forum

    La question des tableau 2D revient souvent, un petite recherche t'aurait permis de trouver le post suivant qui date d'hier : http://www.developpez.net/forums/d10...r/#post5817491

    Bonne continuation

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2011
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    MERCI mais ce n'est pas la réponse à laquelle je m'attendais.
    Je ne souhaite pas cérer un tableu de pointeur
    J'ai trouvé la réponse à ma question
    en faisant
    std::vector < std::vector < float > > tab(x, std::vector< float >(y))
    tout simplement
    Si vous pensez que ce n'est pas performant, n'hésitez pas à me faire d'autres propositions.

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par catherine86 Voir le message
    MERCI mais ce n'est pas la réponse à laquelle je m'attendais.
    Je ne souhaite pas cérer un tableu de pointeur
    J'ai trouvé la réponse à ma question
    en faisant
    std::vector < std::vector < float > > tab(x, std::vector< float >(y))
    tout simplement
    Si vous pensez que ce n'est pas performant, n'hésitez pas à me faire d'autres propositions.
    Bonjour Catherine,
    La réponse de Loic dans le lien proposé par gbdivers est très exactement la réponse à la question que tu poses :
    (c'est moi qui souligne)
    Citation Envoyé par JolyLoic Voir le message
    Tu as créé un vecteur vide, et tu essaye d'accéder à son premier élément, il est normal qu'il ne soit pas content. L'opérateur [] ne crée jamais d'élément, il accède à des éléments existants.
    Lorsque tu écris [I]monTableau[j]+= Y+7;, les vecteurs sont vides, donc tu essais d'accéder à des éléments non créés. Donc le code plantes

    Citation Envoyé par JolyLoic Voir le message
    Généralement, on utilise l'une deux deux méthodes suivantes pour remplir peu à peu un vector :
    - On crée un vecteur contenant N éléments, tous initialisés avec leur valeur par défaut (en appelant le constructeur avec une taille en paramètre, ou en appelant resize), puis on remplace un par un ces éléments par les bonnes valeurs (à l'aide de []).
    C'est exactement ce que tu fais lorsque tu écris std::vector < std::vector < float > > tab(x, std::vector< float >(y))

    Citation Envoyé par JolyLoic Voir le message
    - On insère un par un les éléments les éléments dans un vecteur initialement vide (à l'aide de push_back).
    Ce qui serait quelque chose comme ça avec ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        std::vector < std::vector < float > > tab;
        static const size_t ligne=10;
        static const size_t colonne = 10;
     
        for (size_t i=0;i<ligne;++i)
        {
            tab.push_back(std::vector<float>());
     
            for(size_t  j=0;j<colonne;++j){
                tab[i][j]= Y+7;
            }
        }
    Citation Envoyé par JolyLoic Voir le message
    Par ailleurs, si le but est de stocker des matrices rectangulaires, un vector<vector <>> sera probablement avantageusement remplacé par un simple vector où l'on accède à un élément en faisant une opération comme v[i + j * nbColonnes].
    ++++

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/09/2004, 21h25
  2. ajouter à la suite des tableaux
    Par vic_cw dans le forum C++
    Réponses: 9
    Dernier message: 22/08/2004, 15h11
  3. [OPENOFFICE] Transformation des tableaux OOo en HTML
    Par GrandFather dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 15/05/2004, 18h00
  4. Réponses: 2
    Dernier message: 19/08/2003, 18h04
  5. free sur des tableaux "a moitié dynamiques"
    Par barthelv dans le forum C
    Réponses: 4
    Dernier message: 31/07/2003, 15h30

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