Sign in to follow this  
Evil Steve

std::vector and bool

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
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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this