位图(Bitmap)
位图是一种数据结构,用于存储大量的布尔型数据(即每个数据只有两种状态:0或1)。它通过使用每一位来表示一个状态,从而节省内存空间并提高操作效率。在计算机中,最小的存储单位是字节(byte),而位图则是利用位(bit)来进行数据存储和操作。
位图的实现
在C++中,位图可以通过一个整数数组来实现。每个整数可以存储32个状态(因为一个整数有32位)。用户可以提供一个数据量,这个数据量决定了位图需要多少个整数来存储。
#include <vector>
#include <iostream>
class BitMap {
public:
BitMap(size_t size) : bits((size >> 5) + 1, 0) {
} // size >> 5 等价于 size / 32
void set(size_t num) {
size_t index = num >> 5; // 等价于 num / 32
size_t pos = num & 31; // 等价于 num % 32
bits[index] |= (1 << pos);
}
bool test(size_t num) {
size_t index = num >> 5;
size_t pos = num & 31;
return bits[index] & (1 << pos);
}
void reset(size_t num) {
size_t index = num >> 5;
size_t pos = num & 31;
bits[index] &= ~(1 << pos);
}
private:
std::vector<uint32_t> bits