bitset教程
Bitset
在STL中有一个好用的结构叫做 bitset,今天学习其相关运用。
bitset 是一个由位(bit)组成的数组,每个位可以是 0 或者 1 。
和数组一样从0开始,每个元素都能单独访问,下标编号为[0,N)。
bitset的大小在编译时就需要确定,如果你想要不确定长度的,请使用vector<bool>
1.定义
定义一个大小为 N 的bitset。
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()函数:是否含有0
if(b.none()) cout<<"含有0";
else cout<<"不含0";
5.all()函数:是否全为1
if(b.all()) cout<<"全为1";
else cout<<"全为0";
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;

