bitset位集合容器
bitset容器是一个bit位元素的序列容器,每个元素只占一个bit位,取值为0或1,因而很节省内存空间。
使用bitset,需要声明头文件"#include <bitset>"
bitset类方法列表(bitset<n>b)
方法 | 功能 |
b.any() | b中是否存在置为1的二进制位? |
b.none() | b中不存在置为1的二进制位吗? |
b.count() | b中置为1的二进制位的个数 |
b.size() | b中二进制位的个数 |
b[pos] | 访问b中在pos处的二进制位 |
b.test(pos) | b中在pos处的二进制位是否为1? |
b.set() | 把b中所有二进制位都置为1 |
b.set(pos) | 把b中在pos处的二进制位置为1 |
b.reset() | 把b中所有二进制位置为0 |
b.reset(pos) | 把b中在pos处的二进制位置为0 |
b.flip() | 把b中所有二进制位逐位取反 |
b.flip(pos) | 把b中在pos处的二进制位取反 |
b.to_ulong() | 把b中同样的二进制位返回一个unsigned long值 |
os<<b | 把b中的位集输出到os流 |
- 创建bitset对象
创建bitset对象时,必须指定容器大小。bitset对象大小一经定义,无法修改。
bitset<100000> b//定义对象b,它能容纳100000个元素,即100000个bit位
2. 设置元素值
- 采用下标法
- 采用set()方法,一次性将元素设置为1
- 采用set(pos)方法,将某pos位设置为1
- 采用reset(pos),将某pos位设置为0
#include <bitset>
#include <iostream>
using namespace std;
int main(int argc,char* argv[])
{
bitset<10> b;
int i;
b[1]=1;
b.set(6,1);
for(i=b.size()-1;i>=0;i--)
cout<<b[i];
cout<<endl;
b.set();
for(i=b.size()-1;i>=0;i--)
cout<<b[i];
cout<<endl;
b.reset(0);
b.reset(9);
for(i=b.size()-1;i>=0;i--)
cout<<b[i];
cout<<endl;
b.reset();
for(i=b.size()-1;i>=0;i--)
cout<<b[i];
cout<<endl;
return 0;
}
/*
运行结果:
0001000010
1111111111
0111111110
0000000000
*/3.输出元素
- 下标输出
- 输出流输出全部
#include <bitset>
#include <iostream>
using namespace std;
int main(int argc,char* argv[])
{
bitset<10> b;
int i;
b.set();
b.set(0,0);
b.set(2,0);
b.set(3,0);
b.set(4,0);
b.set(5,0);
b.set(7,0);
b.set(8,0);
for(i=b.size()-1;i>=0;i--)
cout<<b[i];
cout<<endl;
cout<<b<<endl;
return 0;
}
/*
运行结果:
1001000010
*/