Hi. How can I create a vector<bool> efficiently from a char* or a
vector<char> ?
For example, if char* c[2] == (8,10) I want vector<bool> v to be:
(00001000000010 10) 3 3454
Alexandros escribió: Hi. How can I create a vector<bool> efficiently from a char* or a vector<char> ?
For example, if char* c[2] == (8,10) I want vector<bool> v to be: (00001000000010 10)
It would be enough to be able to get access to each bit of the byte
vector, without creating a vector<bool>. I'd like the most efficient
solution.
"Alexandros " <em***@company. com> wrote... Alexandros escribió: Hi. How can I create a vector<bool> efficiently from a char* or a vector<char> ?
For example, if char* c[2] == (8,10) I want vector<bool> v to be: (00001000000010 10)
It would be enough to be able to get access to each bit of the byte vector, without creating a vector<bool>. I'd like the most efficient solution.
Wrap your char array in a class with a special member function to
access those bits:
class MyVectorBool {
int size;
unsigned char *storage;
public:
MyVectorBool(co nst char* str)
: size(strlen(str ))
, storage(new char[size+1])
{
std::copy(str, str + size + 1, storage);
}
// don't forget the other three: d-tor, copy c-tor, assignment op.
bool get_bit(std::si ze_t n) const
{
unsigned char which_bit = 1 << (n % CHAR_BIT);
return storage[n / CHAR_BIT] & which_bit;
}
void set_bit(std::si ze_t n, bool towhat)
{
...
}
void clear_bit(std:: size_t n)
{
...
}
};
Should be efficient enough...
Victor
On Sat, 27 Dec 2003 12:13:15 +0000, Alexandros wrote: Alexandros escribió: Hi. How can I create a vector<bool> efficiently from a char* or a vector<char> ?
For example, if char* c[2] == (8,10) I want vector<bool> v to be: (00001000000010 10)
It would be enough to be able to get access to each bit of the byte vector, without creating a vector<bool>. I'd like the most efficient solution.
Efficient in what? Memory? Lookup time? Programmer time? These are
almost orthogonal quantities for this problem.
And are you sure you need the most efficient solution? On todays hardware
a few cycles and/or bytes are hardly noticed, if at all.
I personally would use a std::bitset if the size is known beforehand. If
not, I might have a look at vector<bool>, but as that has many
limitations, I would also look if a vector<char> (wrapped in a suitable
class) would be acceptable. Also a set<bool> might be acceptable, if only
a few bits are set it might even be very efficient.
Back to your original problem. A vector<bool> has the problem that it does
not resize on access through [], so either resize it on every setting of a
bit, or find the maximum value in c and resize to that maximum. From there
it is a simple loop (or for_each with a suitable functor) to set each bit.
HTH,
M4 This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: Scott Brady Drummonds |
last post by:
Hi, everyone,
I have a program in which I need to store a series of Boolean values. A
vector<bool> would be ideal. However, I'm concerned about this data
structure because of Scott Meyers' Effective STL's Item 18: Avoid using
vector<bool>.
Plus, I'm loath to use bit_vector since SGI's STL implementation says it
will soon be dropped on the floor
(http://www.sgi.com/tech/stl/bit_vector.html).
|
by: klaas |
last post by:
the following code gives rise to the beneath error message, only when
a matrix object is instantiated as matrix<bool>, not with matrix<float>:
/*returns a reference to the object at position (Row,Col) in matrix*/
template <class num_type,template <class T> class functor>
num_type & matrix<num_type,functor >::operator()(const int Row,const
int Col)
{if (Row<rows && Col<cols)
{vector<num_type> & x=matrix_core;
//num_type & y=x;<-is also...
|
by: Michael |
last post by:
Righty,
1: Is there a standard library that contain matrices and complex numbers. I
need to find eigen values of a 3x3 matrix.
2: Is there a way of getting the pointer to the start of an array from the
data stored in a std vector. I load loads of floats into a vector at the
moment to store vertex infomration for openGL, but to render them, I need to
pass a pointer to the beginning of the array to OpenGL, not a vector. At the
|
by: Alex Vinokur |
last post by:
------ foo.cpp ------
#include <vector>
using namespace std;
int main()
{
const vector<int> v1 (10);
const vector<bool> v2 (10);
&v1;
|
by: Bo Peng |
last post by:
Dear list,
I am using std::vector<bool> (bit_vector) to store my bit sequence. To
access the same sequence from C (to expose to a python module), I need
to know the pointer and offset of vector::<bool>::iterator (or
reference). However, given a std::vector<bool> a, all a.begin(), a
etc are instances of a proxy class so I can not do things like
&*a.begin(). Is there a safe way to get the information I need?
Many thanks in advance.
| |
by: Piotr |
last post by:
In effective STL, it said one should not use vector<bool> but use
dequeue<bool> instead.
But can dequeue<bool> has random access iterator? and I do this?
dequeue<bool> myboolarray;
if (myboolarray) {
// do this...
}
if not, is there another solution?
|
by: huomingxu |
last post by:
in gdb, when print an element of vector<bool>, it returns the offset of
the bi
t
instead of the value.
e.g: (visible is of type vector<bool>)
(gdb) p layout._visible
$15 = {_M_p = 0x9817d00, _M_mask = 8}
(gdb) p layout._visible & 0x80
Structure has no component named operator&.
(gdb)
|
by: zl2k |
last post by:
hi, there
I am using a big, sparse binary array (size of 256^3). The size may be
changed in run time. I first thought about using the bitset but found
its size is unchangeable. If I use the vector<bool>, does each element
takes 4 bytes instead of 1 bit? I am using gcc3.4.4. There is a
bit_vector which is kind of old so I wont use that. Any other choices?
Thanks ahead.
zl2k
|
by: Lionel B |
last post by:
On my platform I find that the std::vector<boolspecialisation incurs a
significant performance hit in some circumstances (when compared, say, to
std::vector<intprogrammed analagously). Is it possible to "spoof"
std::vector into implementing a "true" vector of bool rather than the
specialisation?
Say I do:
typedef bool boolreally;
std::vector<booleallybvec;
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed.
This is as boiled down as I can make it.
Here is my compilation command:
g++-12 -std=c++20 -Wnarrowing bit_field.cpp
Here is the code in...
|
by: jinu1996 |
last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth.
The Art of Business Website Design
Your website is...
| |
by: Hystou |
last post by:
Overview:
Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
|
by: tracyyun |
last post by:
Dear forum friends,
With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
|
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own....
Now, this would greatly impact the work of software developers. The idea...
|
by: conductexam |
last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one.
At the time of converting from word file to html my equations which are in the word document file was convert into image.
Globals.ThisAddIn.Application.ActiveDocument.Select();...
|
by: adsilva |
last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
|
by: 6302768590 |
last post by:
Hai team
i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
| |
by: bsmnconsultancy |
last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...
| |