I'm working with a user-defined quantity of bits (I'm holding a three-dimensional array of bits, so the size increases cubically - assume no less then 512 bits), and need to flip them each individually. Right now, just on a computer, I'm using the bool
type, since memory isn't an issue. I do plan to move the code to a microcontroller in the future, and so processing power and memory requirements may be an issue. Right now though, I just want speed.
I then found the std::bitset
object from the C++ STL, but I can't define a bitset's size at runtime. I then found that the std::vector<byte>
has a special initializer to store them as bits (instead of entire bytes, or 4 bytes) but then found this section in Wikipedia:
The Standard Library defines a specialization of the
vector
template forbool
. The description of this specialization indicates that the implementation should pack the elements so that everybool
only uses one bit of memory. This is widely considered a mistake. [...] There is a general consensus among the C++ Standard Committee and the Library Working Group thatvector<bool>
should be deprecated and subsequently removed from the standard library, while the functionality will be reintroduced under a different name.
Now, you can probably see my want for using a vector<bool>
object, but after reading that, I'm considering using something else. The only problem is that I'm not sure what to use. I was curious though why they state that the functionality should be re-introduced (albeit under a different name).
So, my question is, would the use of vector<bool>
objects be acceptable (being that they are a part of the STL)? Are they a part of the C++ standard?
If their use is not acceptable, is there an acceptable, alternative solution (outside me defining a special container myself)? I have a few ideas myself, but I'm just curious if anyone has a better solution. Also, I would like to avoid using large libraries (again, I want to eventually port this code to a microcontroller).
There's nothing wrong with correct usage of
vector<bool>
, just like there's nothing wrong withauto_ptr
- as long as you know the drawbacks and the surprises before going on.