位集合(STL bitset)简介
【bitset 官方网址】
https://cplusplus.com/reference/bitset/bitset/
位集合(Bit Set)是一种高效存储和操作布尔值(true/false)或二进制位(0/1)的数据结构,主要用于处理大规模整数集合或状态标志。
【bitset 各函数用法简介】
● 初始化 → https://cplusplus.com/reference/bitset/bitset/operator[]/
#include <bits/stdc++.h>
using namespace std;int main () {bitset<5> foo; //00000foo[1]=1; //00010foo[2]=foo[1]; //00110cout<<foo<<endl; //00110return 0;
}
● std::bitset::count → https://cplusplus.com/reference/bitset/bitset/count/
count() 函数统计 01 串中 1 的个数。
#include <bits/stdc++.h>
using namespace std;int main () {bitset<8> foo(string("10110011"));cout<<foo<<"\n";cout<<foo.count()<<" ones.\n";cout<<(foo.size()-foo.count())<<" zeros.\n";return 0;
}/*
10110011
5 ones.
3 zeros.
*/
● std::bitset::size → https://cplusplus.com/reference/bitset/bitset/size/
size() 函数返回 01 串的长度。
#include <bits/stdc++.h>
using namespace std;int main () {bitset<8> foo;bitset<4> bar;cout<<foo.size()<<'\n'; //8cout<<bar.size()<<'\n'; //4return 0;
}
● std::bitset::test → https://cplusplus.com/reference/bitset/bitset/test/
cout<<boolalpha; 是 C++ 中的一条语句,用于设置 cout 的输出格式,使其在输出布尔值时显示为 true 或 false(而不是默认的 1 或 0)。
#include <bits/stdc++.h>
using namespace std;int main () {bitset<5> foo(string("01011"));cout<<boolalpha; //emphasisfor(int i=0; i<foo.size(); i++) {cout<<foo.test(i)<<'\n';}return 0;
}/*
true
true
false
true
false
*/
● std::bitset::set → https://cplusplus.com/reference/bitset/bitset/set/
利用 set() 将所有位的值设为 1。
利用 set(x) 将第 x 位的值设为 1。(从右往左计位,最右边的位序为 0)
利用 set(x,0) 将第 x 位的值设为 0。
#include <bits/stdc++.h>
using namespace std;int main () {bitset<5> foo;cout<<foo.set()<<'\n'; //11111cout<<foo.set(2,0)<<'\n'; //11011cout<<foo.set(2)<<'\n'; //11111return 0;
}
● std::bitset::reset → https://cplusplus.com/reference/bitset/bitset/reset/
利用 reset(x) 将第 x 位的值设为 0。(从右往左计位,最右边的位序为 0)
利用 reset() 将所有位的值设为 0。
#include <bits/stdc++.h>
using namespace std;int main () {bitset<5> foo(string("10111"));cout<<foo.reset(2)<<'\n'; //10011cout<<foo.reset()<<'\n'; //00000return 0;
}
● std::bitset::flip → https://cplusplus.com/reference/bitset/bitset/flip/
flip() 函数将 0 置为 1,将 1 置为 0。
#include <bits/stdc++.h>
using namespace std;int main () {bitset<5> foo(string("10001"));cout<<foo.flip(2)<<'\n'; //10101cout<<foo.flip()<<'\n'; //01010return 0;
}
● std::bitset::all → https://cplusplus.com/reference/bitset/bitset/all/
all:01 串中各位都是 1;
any:01 串中至少有一位是 1;
none:01 串中没有 1。
#include <bits/stdc++.h>
using namespace std;int main () {bitset<8> foo;cin>>foo; //11111111cout<<boolalpha;cout<<"all: "<<foo.all()<<'\n'; //truecout<<"any: "<<foo.any()<<'\n'; //truecout<<"none: "<<foo.none()<<'\n'; //falsereturn 0;
}
【参考文献】
https://cplusplus.com/reference/bitset/bitset/