用于保存二进制标志的 C++ 位图

标签 c++ memory-management bitmap bit-manipulation bitflags

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

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

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

flag_n = (flag_array>>n)&0d1

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

我怎样才能做到这一点?

最佳答案

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

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

关于用于保存二进制标志的 C++ 位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43201011/

相关文章:

c++ - 这段 C++ 代码在给出段错误时有什么问题?

c++ - 简化四面体网格的库

c# - 显式事件添加/删除,误解了吗?

java - 如何在 Canvas 的右上角绘制位图

android - 如何在不改变文件大小的情况下旋转位图?

android - 在 Canvas 上绘制两个位图时,应用程序变得太慢了!

c++ - 查找 'n' 通用数组的交集

c++ - 这个 C/C++ 表达式是什么意思

c - gcc 的大数组声明及其问题

c# - C# 可以并将对象写入页面文件吗?