Using vector<bool> for variable-size sequences of bits
In the previous recipe, we looked at using std::bitset
for fixed-size sequences of bits. Sometimes, however, an std::bitset
is not a good choice because you do not know the number of bits at compile time, and just defining a set of a large enough number of bits is not a good idea because you can get into a situation when the number is not actually large enough. The standard alternative for this is to use the std::vector<bool>
container that is a specialization of std::vector
with space and speed optimizations, as implementations do not actually store Boolean values, but individual bits for each element.
Note
For this reason, however, std::vector<bool>
does not meet the requirements of a standard container or sequential container, nor does std::vector<bool>::iterator
 meet the requirements of a forward iterator. As a result, this specialization cannot be used in generic code where a vector is expected. On the other...