Una buena elección depende de cómo va a usar los bits.
std::bitset<N>
es de tamaño fijo. Visual C++ 10.0 es wrt no conforme. a los constructores; en general, debe proporcionar una solución alternativa. Esto fue, irónicamente, debido a lo que Microsoft pensó que era una corrección de errores: introdujeron un constructor tomando el argumento int
, según recuerdo.
std::vector<bool>
está optimizado de la misma manera que std::bitset
. Costo: la indexación no proporciona directamente una referencia (no hay referencias a bits individuales en C++), sino que devuelve un objeto proxy, que no es algo que notes hasta que intentes usarlo como referencia. Ventaja: almacenamiento mínimo, y el vector puede cambiar de tamaño según sea necesario.
Simplemente usando, por ejemplo, unsigned
es también una opción, si va a tratar con un pequeño número de bits (en la práctica, 32 o menos, aunque la garantía formal es de solo 16 bits).
Finalmente, TODOS los identificadores MAYÚSCULAS son por convención (excepto Microsoft) reservados para macros, a fin de reducir la probabilidad de colisiones de nombres. Por lo tanto, es una buena idea no utilizar TODOS los identificadores MAYÚSCULAS para nada más que macros. Y para usar siempre TODOS los identificadores MAYÚSCULAS para macros (esto también hace que sea más fácil reconocerlos).
Saludos & HTH.,
Para citar la página de cplusplus.com en bitset, "La clase es muy similar a una matriz regular, pero la optimización de la asignación de espacio". Si sus entradas son de 4 bytes, un conjunto de bits utiliza 32 veces menos espacio. – AlcubierreDrive
Su estructura 'BIT' se alineará de todos modos a (al menos) un byte. – Archie
@Jon, publica eso como respuesta. (Es un buen punto.) –