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 :

Un booléen sur 1 bit ?


Sujet :

C++

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut Un booléen sur 1 bit ?
    Bonjour à tous,


    Dans mon programme, chaque classe possède des variable membres capable d'avertir lorsque leur valeur change.
    J'ai besoin que chaque objet écoute ses membres afin de positionner des flags de changements, pour d'une part savoir s'il est nécessaire de mettre à jour la base de donnée pour cet objet, et d'autre part construire la requête de mise à jour avec seulement les valeurs qui ont été modifiée.

    Je pensais à un std::vector<bool>. Mais un booléen étant sur 1 octet ( d'après le sizeof(bool) ), je voulais savoir s'il y avait des collections permettant de gérer des flags. J'ai pensé aux bitset mais aparemment le conteneur est équivalent à std::vector<bool>.

    Ayant 3000 objets à gérer en cas nominal, donc chacun d'entre eux possède une centaine de propriétés, ça me fait 300 000 flags, donc je cherche à ce que ce soit optimisé un minimum.

    Merci beaucoup,

    A bientôt
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 264
    Points : 725
    Points
    725
    Par défaut
    Il me semble que vector a une spécialisation pour que les bool ne prennent effectivement qu'un bit :

    http://www.cppreference.com/wiki/stl/vector/start

    C'est expliqué en bas de la page.
    "By and large I'm trying to minimize mentions of D in C++ contexts because it's as unfair as bringing a machine gun to a knife fight." - Andrei Alexandrescu

  3. #3
    Membre averti Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Points : 412
    Points
    412
    Par défaut
    Tu peux regarder du côté de bitset

    Bitset is very similar to vector<bool> (also known as bit_vector)

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Ha ok, je savais pas.

    Et donc j'imagine alors qu'un bitset utilise un vector<bool> pour y ajouter des fonctions propres aux bits ? Par exemple savoir si au moins 1 bit est activé.

    Merci beaucoup
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  5. #5
    Membre averti Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Points : 412
    Points
    412
    Par défaut
    La classe est optimisée pour l'utilisation de bits, décalage binaire, accès à un indice donné, ... Que du bonheur comme diraient certains

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Ok super, j'ai juste vu le boost::dynamic_bitset pour définir la taille à l'exécution plutôt qu'à la compilation.

    Impeccable, j'ai tout ce qu'il me faut pour continuer.

    Merci beaucoup,

    A bientôt
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  7. #7
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    vector<bool> c'est le mal.
    Mieux vaut utiliser dynamic_bitset.
    Boost ftw

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

Discussions similaires

  1. Manipulations sur les bits
    Par ThE_LaSt dans le forum C
    Réponses: 23
    Dernier message: 27/03/2006, 14h22
  2. Addition sur 16 bits de tous les octets d'une chaîne
    Par fkerbourch dans le forum Langage
    Réponses: 6
    Dernier message: 06/07/2005, 11h06
  3. Insérer un entier sur 64 bits dans une base ?
    Par DJZiaK dans le forum SQLite
    Réponses: 1
    Dernier message: 10/05/2005, 17h37
  4. Réel sur 80 bits...
    Par julson dans le forum Assembleur
    Réponses: 12
    Dernier message: 17/05/2004, 16h37
  5. opérations sur les bits d'un byte
    Par petitours dans le forum C++Builder
    Réponses: 4
    Dernier message: 10/02/2004, 20h42

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