2017-04-04 54 views
2

问题是这样的:我需要创建一个位图(一系列二进制标志)来保存有关一堆对象的真/假信息;对象的数量并不是先验已知的,所以我必须在运行时分配足够的标志,可能在位图创建期间。C++位图保存二进制标志

鉴于max_num_elements元素,我的第一个想法是分配的((num_elements/8)+1)*sizeof(char)位的数组:因为char是8位长,它可以处理8个二进制标志,所以我得到的char S中minimun号举行num_elements标志,具有最大内存浪费7bits。

真正的问题是检查/设置标志:我因子评分做全阵列,然后按位和一些bitshifting获得标志N像

flag_n = (flag_array>>n)&0d1 

,但如果我理解正确的话,这个变速操作不会影响整个数组,只是第一个元素。

我该如何做到这一点?

+0

除非我失去了一些东西,为什么不是一个长而不是位图。第一位对于某些属性保持真/假,对于另一属性保持第二位等等。 – Eugene

回答

1

std::vector<bool>专门用于实现这一点。

It is actually a problem in many cases,因为对元素的访问返回的是代理对象而不是bool&,所以它不像所有其他容器那样工作,但在您的情况下,它似乎适合您的需要。

+0

非常感谢@bobtfish,不知道这个专业化,它会非常有帮助。 但阅读链接我也发现[std :: bitset](http://en.cppreference.com/w/cpp/utility/bitset/bitset),这符合我最需要的,所以我会去的我的项目。 – fudo