¿Definir el tamaño del conjunto de bits en la inicialización?

Quiero hacer un conjunto de bits en C ++. Hice un poco de investigación. Todos los ejemplos que encontré fueron así:

bitset myBitset; // do something with it 

Pero no sé el tamaño del conjunto de bits cuando defino la variable en mi clase:

 #include  class Test { public: std::bitset *myBitset; } 

Esto no comstackrá …

Y inicializar así tampoco funciona:

 int size = getDependentSizeForBitset(); myBitset = new bitset(); 

Boost tiene un dynamic_bitset que puedes usar.

Alternativamente, puede usar un vector , que (desafortunadamente) está especializado para actuar como un conjunto de bits. Esto causa mucha confusión y, en general, se considera una mala idea. Pero así es como funciona, así que si eso es lo que necesitas, podrías usarlo, supongo.

Utilice Boost :: dynamic_bitset

Deberías echarle un vistazo para boost dynamic_bitset.

Lo que dices al principio no es verdad. Los “ejemplos que encontraste” no se veían como los publicaste. Es imposible usar un valor no constante para parametrizar una plantilla. Entonces, tu primer ejemplo no es válido. Solo las expresiones constantes pueden servir como argumentos sin tipo para una plantilla. Es decir, el argumento sin tipo tiene que ser una constante en tiempo de comstackción.

Parece que desea crear un conjunto de bits cuyo tamaño no sea una constante en tiempo de comstackción. En este caso, la plantilla del conjunto de bitset está fuera de toda duda. Necesita una implementación de conjuntos de bits de tamaño de tiempo de ejecución. Por ejemplo, puede usar std::vector : en muchas implementaciones (si no todas), esta plantilla está especializada para implementar una matriz empaquetada de valores booleanos, donde cada elemento ocupa un bit (a diferencia de un objeto bool ).

bitset requiere tamaño como un parámetro de plantilla, lo que significa que el tamaño debe poder determinarse en tiempo de comstackción. No puede basarse en una condición de tiempo de ejecución, como la entrada del usuario.

Para eso, debes buscar en std :: vector o boost :: dynamic_bitset. std :: vector es una instanciación de plantilla especializada que utiliza un bit por elemento. A diferencia del conjunto de bits, puede ser de tamaño dynamic.

    Intereting Posts