Is the use of std::vector objects in C++ acc

2020-01-26 09:33发布

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 for bool. The description of this specialization indicates that the implementation should pack the elements so that every bool 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 that vector<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).

7条回答
Animai°情兽
2楼-- · 2020-01-26 10:10

There's nothing wrong with correct usage of vector<bool>, just like there's nothing wrong with auto_ptr- as long as you know the drawbacks and the surprises before going on.

查看更多
登录 后发表回答