As (hopefully) we all know, vector<bool> is totally broken and can’t be treated as a C array. What is the best way to get this functionality? So far, the ideas I have thought of are:
- Use a
vector<char>instead, or - Use a wrapper class and have
vector<bool_wrapper>
How do you guys handle this problem? I need the c_array() functionality.
As a side question, if I don’t need the c_array() method, what is the best way to approach this problem if I need random access? Should I use a deque or something else?
Edit:
- I do need dynamic sizing.
- For those who don’t know,
vector<bool>is specialized so that eachbooltakes 1 bit. Thus you can’t convert it to a C-style array. - I guess ‘wrapper’ is a bit of a misnomer. I was thinking something like this:
Of course, then I have to read into a my_bool due to possible alignment issues 🙁
struct my_bool { bool the_bool; }; vector<my_bool> haha_i_tricked_you;
Use
std::dequeif you don’t need the array, yes.Otherwise use an alternative
vectorthat doesn’t specialize onbool, such as the one in Boost Container.