STL泛型编程-bitset位集合容器

时间:2021-12-09 19:26:15

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流

  1. 创建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
    */