bitset类各函数接口总览
namespace cl
{
//模拟实现位图
template<size_t N>
class bitset
{
public:
//构造函数
bitset();
//设置位
void set(size_t pos);
//清空位
void reset(size_t pos);
//反转位
void flip(size_t pos);
//获取位的状态
bool test(size_t pos);
//获取可以容纳的位的个数
size_t size();
//获取被设置位的个数
size_t count();
//判断位图中是否有位被设置
bool any();
//判断位图中是否全部位都没有被设置
bool none();
//判断位图中是否全部位都被设置
bool all();
//打印函数
void Print();
private:
vector<int> _bits; //位图
};
}
注:为了防止与标准库当中的bitset类产生命名冲突,模拟实现时需放在自己的命名空间当中。
bitset类的实现
构造函数
在构造位图时,我们需要根据所给位数N,创建一个N位的位图,并且将该位图中的所有位都初始化为0。
一个整型有32个比特位,因此N个位的位图就需要用到N/32个整型,但是实际我们所需的整型个数是N/32+1,因为所给非类型模板参数N的值可能并不是32的整数倍。
例如,当N为40时,我们需要用到两个整型,即40/32+1=2。

代码如下:
//构造函数
bitset()
{
_bits.resize(N / 32 + 1, 0);
}
set、reset、flip、test
set成员函数用于设置位。
设置位图中指定的位的方法如下:
- 计算出该位位于第 i 个整数的第 j 个比特位。
- 将1左移 j 位后与第 i 个整数进行或运算即可。

本文详细介绍了bitset类的实现原理及使用方法,包括构造函数、位操作函数(set、reset、flip、test)、状态查询函数(size、count、any、none、all)及打印函数等,并通过代码示例解释了各个函数的具体实现。
最低0.47元/天 解锁文章
2001





