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

SL & STL C++ Discussion :

Obtenir l'adresse du contenu d'un std::vector<bool>


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut Obtenir l'adresse du contenu d'un std::vector<bool>
    Voici un exemple de code fonctionnel (mais peut-être pas très "propre")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::vector<unsigned> vu;
    vu.push_back(25);
    unsigned *pu=&*vu.begin();
    file.write(pu,vu.size()*sizeof(unsigned));
    Le but est de récupérer le buffer de vector pour le sauver sur fichier. L'opération inverse en lecture fonctionne aussi.

    Ça ne fonctionne pas avec la spécialisation std::vector<bool>.
    Comment faire pour récupérer son buffer interne dans le but de le transférer dans un fichier binaire ?

  2. #2
    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
    Par défaut
    Salut,
    std::vector<bool> est une spécialisation de std::vector<> optimisée pour que chaque élément n'occupe qu'un bit. Mais en revanche, tu perds la 'continuité' : vect_bool[n] != &vect_bool[0] + n.
    Il y a peut être d'autres solutions, mais la première qui me vient est de sérialiser à la main chaque élément selon le format de ton choix.

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut
    Je viens de trouver une solution sous VS2005, mais je doute que ce soit portable...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    std::vector<bool> vb;
    vb.push_back(true);
    std::_Vbase *b=(*vb.begin())._Getptr();
    Sachant que _Vbase est un typedef sur unsigned.

  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
    Par défaut
    Citation Envoyé par camboui Voir le message
    Je viens de trouver une solution sous VS2005, mais je doute que ce soit portable...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    std::vector<bool> vb;
    vb.push_back(true);
    std::_Vbase *b=(*vb.begin())._Getptr();
    Sachant que _Vbase est un typedef sur unsigned.
    Effectivement, ce n'est pas probablement pas portable et tu risques d'avoir différents problème :
    -> Ne marche plus avec une nouvelle version de VS s'ils décident de changer l'implémentation
    -> Non portable
    -> Problèmes d'endian

  5. #5
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Salut,
    std::vector<bool> est une spécialisation de std::vector<> optimisée pour que chaque élément n'occupe qu'un bit. Mais en revanche, tu perds la 'continuité' : vect_bool[n] != &vect_bool[0] + n.
    Il y a peut être d'autres solutions, mais la première qui me vient est de sérialiser à la main chaque élément selon le format de ton choix.
    contiguïté?

    Sinon pourquoi se taper du NIH (tu te retrouves confronté au même problèmatique) utilise ce qui existe. (boost.serialisation).

  6. #6
    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
    Par défaut
    Citation Envoyé par Goten Voir le message
    contiguïté?
    oui

  7. #7
    r0d
    r0d est actuellement connecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 295
    Billets dans le blog
    2
    Par défaut
    J'ai pas tout suivi, mais std::bitset ne serait-il pas la solution?

  8. #8
    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
    Par défaut
    Citation Envoyé par r0d Voir le message
    J'ai pas tout suivi, mais std::bitset ne serait-il pas la solution?
    Il me semble que le problème sera le même. Tu ne peux pas avoir un pointeur sur la zone mémoire contiguë () représentant les bit, non ?

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

Discussions similaires

  1. Obtenir l'adresse mac de sa carte reseau
    Par kivoch dans le forum C++Builder
    Réponses: 4
    Dernier message: 19/11/2009, 18h30
  2. Debug VS8 contenu d'un std::vector
    Par glKabuto dans le forum Visual C++
    Réponses: 2
    Dernier message: 22/04/2008, 17h26
  3. obtenir l'adresse MAC
    Par acastor dans le forum Développement
    Réponses: 2
    Dernier message: 18/04/2004, 13h19
  4. Obtenir l'adresse IP de mon pc
    Par Biou Pink Powa dans le forum C
    Réponses: 3
    Dernier message: 28/01/2004, 20h01
  5. Obtenir l'adresse MAC réelle
    Par gpetto dans le forum Réseau
    Réponses: 16
    Dernier message: 03/11/2003, 16h56

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