bitset教程

少于 1 分钟阅读时长

发布时间:

Bitset

在 STL 中有一个好用的结构叫做 bitset,今天学习其相关运用。

bitset 是一个由位(bit)组成的数组,每个位可以是 0 或者 1。和数组一样从 0 开始,每个元素都能单独访问,下标编号为 [0,N)。bitset 的大小在编译时就需要确定,如果你想要不确定长度的,请使用 vector<bool>

1. 定义

bitset<N> b;

初始化 bitset:

b=bitset<N>(value);
//value可以为string或者int

2. count() 函数:返回1的数量

int n=b.count();

3. any() 函数:是否含有1

if(b.any()) cout<<"含有1";
else cout<<"不含1";

4. none() 函数:是否不含1

if(b.none()) cout<<"不含1";
else cout<<"含有1";

5. all() 函数:是否全为1

if(b.all()) cout<<"全为1";
else cout<<"不全为1";

6. set() 函数:设置所有位为1

b.set();

7. set(pos,val) 函数:设置指定位置为指定值

b.set(3,0);

8. reset() 函数:设置所有位为0

b.reset();

9. flip() 函数:取反所有位

b.flip();

10. flip(pos) 函数:取反指定位

b.flip(2);

11. test(pos) 函数:指定位是否为1

if(b.test(2)) cout<<"第2位为1";

12. to_string() 函数:将bitset转换为字符串

string s=b.to_string();

bitset整体运算

bitset 的运算就像一个普通整数一样,可以进行位运算。

bitset<4> b1("1100");
bitset<4> b2("1010");
b1^=b2;
b1|=b2;
b1&=b2;
b1>>1;
b1<<1;

进行单点修改时,直接访问位置赋值即可,时间复杂度 O(1):

s[pos]=x;

输入如果不足 N 个,会从第 0 位开始赋值;大于 N 个,会截断前 N 个。输出时 bitset 是反着输出的,会先输出第 N-1 个,接着依次。

cin>>b;
cout<<b;

发表评论