用于保存二进制标志的 C++ 位图
C++ bitmap to hold binary flags
问题是这样的:我需要创建一个位图(一系列二进制标志)来保存有关一堆对象的 true/false 信息;对象的数量不是先验的,所以我必须在运行时分配足够的标志,可能是在位图创建期间。
给定 max_num_elements
元素,我的第一个想法是分配一个 ((num_elements/8)+1)*sizeof(char)
位的数组:因为 char
是 8 位长,它可以处理 8 个二进制标志,所以我得到保存 num_elements
标志的最小 char
数量,最大内存浪费为 7 位。
真正的问题是 checking/setting 标志:我想对整个数组进行一些移位,然后按位进行移位,然后得到像
这样的标志 n
flag_n = (flag_array>>n)&0d1
但如果我没理解错的话,移位操作不会影响整个数组,只会影响第一个元素。
我怎样才能做到这一点?
std::vector<bool>
专门用于实现这一点。
It is actually a problem in many cases,因为访问元素 returns 是一个代理对象而不是 bool&
,所以它的行为并不像所有其他容器,但它看起来像在你的情况下它适合你的需要。
问题是这样的:我需要创建一个位图(一系列二进制标志)来保存有关一堆对象的 true/false 信息;对象的数量不是先验的,所以我必须在运行时分配足够的标志,可能是在位图创建期间。
给定 max_num_elements
元素,我的第一个想法是分配一个 ((num_elements/8)+1)*sizeof(char)
位的数组:因为 char
是 8 位长,它可以处理 8 个二进制标志,所以我得到保存 num_elements
标志的最小 char
数量,最大内存浪费为 7 位。
真正的问题是 checking/setting 标志:我想对整个数组进行一些移位,然后按位进行移位,然后得到像
这样的标志 nflag_n = (flag_array>>n)&0d1
但如果我没理解错的话,移位操作不会影响整个数组,只会影响第一个元素。
我怎样才能做到这一点?
std::vector<bool>
专门用于实现这一点。
It is actually a problem in many cases,因为访问元素 returns 是一个代理对象而不是 bool&
,所以它的行为并不像所有其他容器,但它看起来像在你的情况下它适合你的需要。