PDA

View Full Version : [C++]A cosa servono i bitset???


Luc@s
17-03-2004, 15:19
Per cosa sono usati gli std::bitset???
Sono paragonabili ai campi di bit come struttura???


Tnk 100000000000

Elysium
17-03-2004, 15:37
ciao...i bitset hanno molte funzionalita' in piu' che li rende piu' comodi...ad esempio la possibilita' di inserire una sequenza di bit direttamente come stringa (sequenza di 0 e 1) ed altre amenita' legate ai container STL...ovviamente l'overhead c'e' per forza di cose :)

fpucci
17-03-2004, 15:39
Non conosco il c++, ma credo che si tratti di un oggetto della libreria standard che consenta la manipolazione di dati di tipo bit, permettendo di accedere ad essi come se fossero array (tali array di bit si leggono da sx verso dx anziché da dx verso sx come nei vettori convenzionali).

Luc@s
17-03-2004, 15:46
Originariamente inviato da Elysium
ciao...i bitset hanno molte funzionalita' in piu' che li rende piu' comodi...ad esempio la possibilita' di inserire una sequenza di bit direttamente come stringa (sequenza di 0 e 1) ed altre amenita' legate ai container STL...ovviamente l'overhead c'e' per forza di cose :)

Quindi sono campi di bit(ereditati dal C) ma migliorati??

Elysium
17-03-2004, 15:59
mooolto di piu'...i campi bit sono formalmente delle strutture e basta.
I bitset sono dei container (classi template) che arrivano direttamente dalla Standard Template Libray, con dei metodi particolari che ne rendono l'utilizzo molto piu' semplice ed intuitivo.
Supportano una serie di cose fra le quali l'accesso diretto tipo array come diceva fpucci, iteratori etc etc.
Se vuoi semplicita' di utilizzo buttati sui bitset mentre se vuoi performances vai sui campi bit. :)

Saluti

/\/\@®¢Ø
17-03-2004, 19:12
Originariamente inviato da Luc@s
Per cosa sono usati gli std::bitset???
Sono paragonabili ai campi di bit come struttura???


Tnk 100000000000
Un bitset puo' essere visto come un array di booleani. Rispetto a quest'ultimo pero', fornisce una interfaccia per le operazioni bitwise ( AND, OR, shift a destra e sinistra) , e ogni valore occupa effettivamente un bit di memoria (mentre nell'array ogni booleano occupa un byte). Questo fa si' che l'accesso ai singoli elementi dell'array sia relativamente costoso.

Ad esempio

typedef bitset< 8*sizeof(long) > bs;
bs x = 123;
bs y = 456;
bs z = x | y
unsigned long ul = z.to_ulong();

produce lo stesso risultato di

unsigned long x,y,ul;
x = 123;
y = 456;
ul = x | y;

Risulta particolarmente utile quando si deve operare bit a bit , ma gli interi predefiniti non sono sufficientemente grandi.