前言:
在计算机图形学中,位图(Bitmap)也称为光栅图,是由像素点组成的图像表示方式。在 C++ 编程中,位图可以通过特定的函数和数据结构来进行处理和操作。
BitMap
- 位图(
BitMap
)是一种数据结构,它使用每一位二进制数来表示一个数据项的存在状态。 - 在C++中,位图通常用于处理大量的布尔值或整数集合,以实现高效的空间和时间性能。
- 位图通过使用一组整数数组来表示一组元素的状态,其中每个整数可以表示多个元素的存在状态,通常是8个或更多。
BitMap
常见操作(位操作介绍)
- 位图提供了几种基本操作,包括设置(set)、重置(reset)和测试(test)。
- 设置操作将指定的位设置为1,重置操作将指定的位设置为0,而测试操作则检查指定的位是否为1。
- 这些操作通常涉及位运算符,如按位或(|=)、按位与(&=)和按位异或(^=)。
BitMap
实现
- 位图的精髓在于利于一个比特位确定一个值是否存在,更改的是比特位,就需要利用位操作符。
- 给一个非类型模板参数进行空间的开辟。
- 位图进行初始化,每个位置初始化为0,经过计算映射到对应的比特位。
- 初始化除以一个32(以整形开辟的空间),+1是为了防止空间除后空间少32位。
set
和reset
就是进行位图的核心操作。test
的检测有很多方法,提供一个比较容易理解的检测。
template<size_t N >
class bitset
{
public:
birset()
{
_a.resize(N / 32 + 1);
}
void set(const size_t x)
{
size_t i = x / 32;
size_t j = x % 32;
_a[i]|= (i<<j)
}
void reset(const size_t x)
{
size_t i = x / 32;
size_t j = x % 32;
_a[i] &= (~(i << 32));
}
bool test(const size_t x)
{
size_t i = x / 32;
size_t j = x % 32