2

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

给定max_num_elements元素,我的第一个想法是分配一个((num_elements/8)+1)*sizeof(char)位数组:因为 achar是 8 位长,它可以处理 8 个二进制标志,所以我得到了chars 的最小数量来保存num_elements标志,最大内存浪费为 7 位。

真正的问题是检查/设置标志:我很难对整个数组进行一些位移,然后是按位并得到标志 n 像

flag_n = (flag_array>>n)&0d1

但如果我理解正确,移位操作不会影响整个数组,只会影响第一个元素。

我怎样才能做到这一点?

4

1 回答 1

1

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

在许多情况下这实际上是一个问题,因为对元素的访问返回一个代理对象而不是 a bool&,所以它的行为并不像所有其他容器一样,但在你的情况下它似乎适合你的需要。

于 2017-04-04T07:49:24.483 回答