• Advertisement
Sign in to follow this  

std::vector and bool

This topic is 4219 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi all, I'm doing some bit-stuffing code at the moment, and I figured I could use std::vector<bool> to do that, since it's specialised (apparently). I know this is valid: std::vector<int> foo; // Stuff things into foo int* pData = &foo[0]; Since vector storage is contiguous. However, CodeWarrior spazzes out when I do this: std::vector<bool> foo; // Stuff a multiple of 8 bits into foo void* pData = &foo[0]; The error I get is:
Quote:
illegal explicit conversion from 'std::__bit_iterator<Metrowerks::__bitvec_deleter<std::allocator<bool>>, false>' to 'void *'
I presume that's because CodeWarrior isn't using a vector at all. Is what I'm trying to do valid (I.e. is it a compiler error), or are you not allowed to do this with a vector of bools? For the moment, I'm having to convert the vector into a void* manually, which isn't particularly efficient. Is there some std::copy I could use to do this which would be as efficient as direct pointer access? Cheers, Steve

Share this post


Link to post
Share on other sites
Advertisement
The bool values in std::vectors<bool> are implemented using single bits. You cannot get a reference or pointer to a bit, so you get an error.

This is the downside to the apparent "optimisation" that is std:vector<bool>/

Share this post


Link to post
Share on other sites
Guest Anonymous Poster
There are sometimes when standard namespaces templates just dont do it. I did something like this for a huffman encoding yet using unsigned char*(wrapped inside a class), using malloc instead of new (due to speed, ie remalloc instead of delete[] and then new again).

Share this post


Link to post
Share on other sites
Quote:
Original post by rip-off
The bool values in std::vectors<bool> are implemented using single bits. You cannot get a reference or pointer to a bit, so you get an error.

This is the downside to the apparent "optimisation" that is std:vector<bool>/
Ah well, that's what I thought. I'll just it my way then.

Thanks for the reply

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement