Una buona scelta dipende da come userete i bit.
std::bitset<N>
è di dimensione fissa. Visual C++ 10.0 è wrt non conforme. ai costruttori; in generale devi fornire una soluzione alternativa. Questo è stato, ironia della sorte, a causa di ciò che Microsoft pensava fosse una correzione di bug - hanno introdotto un costruttore che prendeva argomento int
, come ricordo.
std::vector<bool>
è ottimizzato allo stesso modo di std::bitset
. Costo: l'indicizzazione non fornisce direttamente un riferimento (non ci sono riferimenti a singoli bit in C++), ma restituisce invece un oggetto proxy, che non è qualcosa che si nota finché non si tenta di utilizzarlo come riferimento. Vantaggio: spazio di archiviazione minimo e il vettore può essere ridimensionato secondo necessità.
Semplicemente usando per es. unsigned
è anche un'opzione, se hai intenzione di gestire un piccolo numero di bit (in pratica 32 o meno, sebbene la garanzia formale sia solo di 16 bit).
Infine, TUTTI gli identificatori UPPERCASE sono per convenzione (tranne Microsoft) riservati per macro, al fine di ridurre la probabilità di collisioni di nomi. Pertanto è una buona idea non utilizzare TUTTI gli identificatori UPPERCASE per nient'altro che le macro. E per usare sempre gli identificatori di TUTTO MAIUSCOLO per i macro (questo rende anche più facile riconoscerli).
Acclamazioni & hth.,
fonte
2010-10-22 15:29:28
per citare pagina cplusplus.com su bitset, "La classe è molto simile a una serie regolare, ma ottimizzando l'allocazione dello spazio". Se i tuoi int sono 4 byte, un set di bit utilizza 32 volte meno spazio. – AlcubierreDrive
La struttura 'BIT' sarà allineata comunque a (almeno) un byte. – Archie
@Jon, postalo come risposta. (È un buon punto.) –