example ejemplos bool c++ stl iterator bitset std-bitset

c++ - ejemplos - ¿Por qué std:: bitset no viene con iteradores?



bitset java (2)

No creo que haya una decisión real para excluir a los iteradores de bitset.

Más bien, el conjunto de bits es una de las clases que preceden a la propuesta de agregar la Biblioteca de plantillas estándar original al estándar de C ++. Cuando se diseñó, esencialmente ninguna de las bibliotecas estándar incluía iteradores.

Luego, se propuso la adición de la biblioteca de Stepanov, y se aceptó bastante de ella. En respuesta a eso, se hicieron adiciones a algunas clases existentes (por ejemplo, std::string ) para permitir que se usen como las nuevas clases de contenedor.

Sin embargo, todo esto sucedió bastante tarde en el proceso de estándares; de hecho, ya cumplieron con las reglas en algunos lugares para agregar lo que hicieron. Entre otras cosas, casi al mismo tiempo que se agregaron los contenedores / iteradores / algoritmos a la biblioteca, el comité votó para considerar la "característica completa" estándar, por lo que a partir de ese momento solo trabajarían para corregir errores y demás. No añadiendo nuevas funcionalidades.

Como tal, incluso si se hubiera escrito una propuesta para agregar una interfaz de iterador a un bitset de bitset , la única forma en que el comité podría haberlo aceptado sería tratar esto como un error que se está solucionando en lugar de agregar una nueva característica. Si hubiera habido una propuesta realmente sólida, supongo que podrían haberlo hecho, pero no creo que haya una propuesta de este tipo, y habría estado estirando el tema bastante, por lo que incluso una propuesta realmente buena podría fácilmente han sido rechazados.

Desde entonces, hubo una propuesta, LEWG 1112 , que habría agregado una interfaz de iterador a std::bitset . Esto se propuso para C ++ 11, y se propuso específicamente para respaldar el bucle for rango que también se estaba agregando en C ++ 11. Sufrió un destino bastante ignominioso: fue aceptado originalmente, y la redacción fue redactada. Luego parecía que la propuesta de agregar Conceptos al lenguaje sería aceptada, por lo que esta redacción se reescribió para usar los nuevos conceptos brillantes y maravillosos. Algún tiempo después, se eliminaron los conceptos del lenguaje y, en lugar de volver a redactar la propuesta para que ya no dependiera de los conceptos, lo marcaron provisionalmente como "Futuro NAD", lo que significa que lo consideraron como un defecto y no aplazaron ningún trabajo adicional. hasta que pase un tiempo (indefinido) en el futuro (y por lo que puedo ver, no lo he vuelto a visitar).

Parece que std::bitset no viene con iteradores STL.
Por lo tanto, no puedo hacer lo siguiente:

std::bitset<8> bs; for (auto it: bs) { std::cout << "this can not be done out of the box/n"; }

En su lugar debo:

std::bitset<8> bs; for (std::size_t i = 0; i < bs.size(); ++i) { std::cout << bs[i] << ''/n''; }

Sin los iteradores, tampoco puedo usar conjuntos de bits con ninguno de los algoritmos STL.
¿Por qué el comité decidió excluir a los iteradores de bitset?


Puedes crear tu propio iterador, o simplemente usar el mine

El uso es el siguiente:

#include <bitset> #include "bitset_iterator.h" std::bitset<32> indices{ 0b10101010101010101010101010101010 }; for (const auto& index : indices) { std::cout << index << ", "; } // Prints "1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, "