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

MFC Discussion :

Sauvegarde std::vector dans un .ini


Sujet :

MFC

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Points : 21
    Points
    21
    Par défaut Sauvegarde std::vector dans un .ini
    Salut tout le monde,

    J'ai un petit probleme concernant la sauvegarde et la lecture d'un tableau de type std::vector<std::vector> dans un fichier INI. Je le fais dejà pour des tableaux classiques et ça marche sans problème (sous forme binaire).
    Par contre avec les std::vector je n'y arrive pas, ça me sauvegarde bien qq chose mais à la lecture ça n'initialise pas mon tableau avec ce qu'il faut.
    J'utilise le code suivant:
    Mon tableau est du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std&#58;&#58;vector < std&#58;&#58;vector<float> > m_tCentreSphere;
    Ensuite j'initialise sa taille
    -Pour la sauvegarde dans le ini
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AfxGetApp&#40;&#41;->WriteProfileBinary&#40;"PairesElectrodes","CoordonneesElectrodes",&#40;BYTE *&#41; &&#40;m_tCentreSphere&#41;,m_tCentreSphere.size&#40;&#41;&#41;;
    Pour la taille apparemment la commande size() ne marche pas, je sais pas pourquoi....

    -Pour la lecture:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    BYTE* pb = NULL; 
    UINT nLen = 0; 
     
    if &#40;AfxGetApp&#40;&#41;->GetProfileBinary&#40;"PairesElectrodes","CoordonneesElectrodes", &pb, &nLen&#41;&#41; 
    	&#123; 
    		ASSERT&#40;nLen == m_tCentreSphere.size&#40;&#41;&#41;;
    		memcpy&#40;&m_tCentreSphere, pb, m_tCentreSphere.size&#40;&#41;&#41;;  
    	&#125;
    En gros ma question est: est-ce que c'est possible de faire çà avec des std::vector? et si oui est-ce que le pb vient de mon code?

    La taille de mon tableau est bien initialisée et pour la taille j'ai testé avec une valeur fixe....mais ça ne marche pas, quand je veux accéder au tableau par la suite, ça plante...

    Merci de votre aide

  2. #2
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Cela ne marchera certainement pas comme ça.
    Un vecteur est une abstraction de T*. Alors le vecteur vecteurs est un T**, soit un tableau de pointeurs. Tu as deux indirections.
    Il te faudra faire une boucle, voire deux.

    Pour la restauration, l'adresse du premier élément du vecteur est "&(v[0])". Et en C++, mieux vaudra écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if &#40;truc_ok&#41; &#123;
        std&#58;&#58;copy&#40;pb, pb+nLen, std&#58;&#58;back_inserter&#40;m_tCentreSphere&#41;&#41;;
    &#125;
    Si tes vecteurs ont tous le même nombre d'éléments, utilise plutôt une structure rectangulaire (boost::multi_array<>, blitz++, boost uBlas, ... (non standard, mais portables))
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Points : 21
    Points
    21
    Par défaut
    Merci beaucoup pour la confirmation et les infos, je vais me diriger dans cette direction maintenant que je sais que ça n'est pas possible de la manière dont je m'y prenais.

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

Discussions similaires

  1. Pb std::vector dans une classe
    Par didi_di dans le forum Langage
    Réponses: 8
    Dernier message: 17/11/2009, 11h07
  2. str::tr1::function dans std::vector
    Par Klaim dans le forum SL & STL
    Réponses: 2
    Dernier message: 25/06/2008, 15h19
  3. Sauvegarde std::map dans un fichier
    Par ZeRiL dans le forum SL & STL
    Réponses: 8
    Dernier message: 03/05/2007, 13h54
  4. Libération de pointeurs dans un std::vector
    Par G dans le forum SL & STL
    Réponses: 17
    Dernier message: 06/04/2005, 23h37
  5. Réponses: 8
    Dernier message: 26/08/2004, 19h59

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