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 :

Vector de vector


Sujet :

C++

  1. #1
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut Vector de vector
    Bonjour a tous et a toutes,

    Je possede un vector de vector d'une classe A:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<std::vector<A*> > a
    J'aimerai le remplir comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a[0][0] = new A('blabla');

    Cependant ceci seg fault.

    Quelqu un serait pourquoi et comment corriger????

    Merci d'avance

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    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.
    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 []).
    - On insère un par un les éléments les éléments dans un vecteur initialement vide (à l'aide de push_back).

    La seconde méthode est particulièrement indiquée quand on ne connait pas au début le nombre d'éléments qu'il y aura dans le vector, ou que les éléments sont suffisamment lourds à manipuler pour qu'on n'ait pas envie de construire des éléments bidon dans le seul but de les remplacer après.

    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].
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Merci de votre reponce!
    J'avais bien sure oublier de reserver de l'espace. J'ai utilise cette methode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     for(int i = 0; i < 8; ++i){
        std::vector<A*> tmp;
        tmp.reserve(8);
        for(int col = 0; col < 8; ++col){
          tmp.push_back(new A());
     
        }
        a.push_back(tmp);
      }
    Ainis je peux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a[0][0] = new A('blabla');

    Merci encore pour les precisions

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 03/05/2007, 00h20
  2. Réponses: 8
    Dernier message: 22/12/2006, 22h36
  3. vector de vector
    Par Clark dans le forum SL & STL
    Réponses: 15
    Dernier message: 07/04/2006, 20h11
  4. [ Vector Fichier ] Vector dans fichier texte
    Par geegee dans le forum Langage
    Réponses: 5
    Dernier message: 21/05/2004, 13h56
  5. [Vector] classe Vector et exception
    Par Nanoua dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 23/04/2004, 12h37

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