简介
b i t s e t bitset bitset说白了就是 01 01 01数组,或者说是 01 01 01字符串,然后赋予了整体的一些位运算等操作。
b i t s e t bitset bitset是以位为单位存的,空间复杂度较低, b i t s e t bitset bitset的操作都可以看做是常数时间复杂度,经常用于优化代码。
构造函数
无参构造。
bitset<32> b;
传入 i n t int int参数,将该数的二进制保存在 b i t s e t bitset bitset中。
bitset<32> b(16);
传入 01 01 01字符串构造。
string s1="1001010";
char s2[]="10011101";
biset<32> b1(s1);
biset<32> b2(s2);
PS:带参构造多出的长度前面用0补充,少的长度取后面部分
支持运算
b i t s e t bitset bitset肯定支持位运算。
bitset<8> b1("10101101");
bitset<8> b2("11100100");
bitset<8> b3;
b3=b1&b2;
b3=b1|b2;
b3=b1^b2;
b3=~b1;
b3=b1<<2;
b3=b2>>2;
类似数组和字符串,可以使用 [ ] [~~] [ ]取得任意位。
注意从右向左依次是 [ 0 , s − 1 ] [0,s-1] [0,s−1]位,这一点和数组字符串不同。
bitset<8> b("11101101");
cout<<b[2]<<endl; //0
常用函数
s i z e ( ) size() size():求 b i t s e t bitset bitset的大小。
bitset<8> b("10101101");
cout<<b.size()<<endl; //8
c o u n t ( ) count() count():统计 b i s t e t bistet bistet中 1 1 1的个数。
bitset<8> b("10101101");
cout<<b.count()<<endl; //5
t o _ s t r i n g ( ) to\_string() to_string():将 b i t s e t bitset bitset转化为 s t r i n g string string类型。
t o _ u l o n g ( ) to\_ulong() to_ulong():将 b i t s e t bitset bitset转化为 u n s i g n e d l o n g unsigned~~long unsigned long类型。
t o _ u l l o n g ( ) to\_ullong() to_ullong():将 b i t s e t bitset bitset转化为 u n s i g n e d l o n g l o n g unsigned~~long~~long unsigned long long类型。
bitset<4> b("1111");
cout<<b.to_string()<<endl; //1111
cout<<b.to_ulong()<<endl; //15
cout<<b.to_ullong()<<endl; //15
f l i p ( v o i d ) flip(void) flip(void)和 f l i p ( i n t ) flip(int) flip(int):不传入参数将所有位取反,传入参数只将参数位取反。
bitset<8> b("10101101");
cout<<b.flip()<<endl; //01010010
cout<<b.filp(0)<<endl; //10101100
s e t ( ) set() set():将参数每一位置为 1 1 1。
r e s e t ( ) reset() reset():将参数每一位置为 0 0 0。
bitset<8> b;
b.set(); //11111111
b.reset(); //00000000
_ F i n d _ f i r s t ( ) \_Find\_first() _Find_first():从低位到高位找下一个含有 1 1 1的位置。
_ F i n d _ n e x t ( p o s ) \_Find\_next(pos) _Find_next(pos):找当前位置的下一个 1 1 1的位置。
bitset<10> b("01001100");
b._Find_first(); //3
b._Find_next(4); //7