What's the best way to store a bit array in C++ (no Boost, just standard containers), representing, for example, a volume allocation bitmap?
I thought std::vector<bool>
was a great idea, but apparently it's Evil and deprecated, so is there a better choice?
If I have a byte array in memory, how would I go about copying them to the recommended container?
(I'm having trouble figuring this out for vector<bool>
.)
a char array and then masking by 0x1 will act as a bit array.
Example:
char bitarray[4]; // since 4*8 this array actually contains 32 bits
char getBit(int index) {
return (bitarray[index/8] >> 7-(index & 0x7)) & 0x1;
}
void setBit(int index, int value) {
bitarray[index/8] = bitarray[index/8] | (value & 0x1) << 7-(index & 0x7);
}
of course these operations are usually comparatively slow, but if memory is an issue this is a decent way to go. I chose char's for this to reduce the number of shifts needed. However it may still be faster with integers.