C++的bitset相关

bitset特性简介

  • bitset是一个bool数组,空间复杂度上来说,会比同等长度的bool数组少一点

  • 可以单独访问某个bit位,就跟使用数组一样,注意索引是从后往前的

    • 举例来说⬇️

      bs:    1 0 1 0 1
      index: 4 3 2 1 0
      
  • 编译的时候bitset的大小就已经确定下来了,不能在运行的时候更改,所以我们在创建bitset的时候要用常量来初始化

bitset的常用函数

  • 常见初始化方式

    bitset<4> bs1(15);
    cout << bs1 << endl;     // 输出15的二进制表示——1111
    
    bitset<4> bs2(string("0101"));
    cout << bs2 << endl;     // 输出我们用于初始化的比特串
    
  • 不同的bitset之间可以方便地位运算

    cout << (bs1 & bs2) << endl;    // 1111 & 0101 = 0101
    
  • bitset可以方便地输出为其他的格式

    cout << bs2.to_string('Y', 'N') << endl;    // 0101 -> NYNY
    cout << bs2.to_ulong() << endl;     // 0101 -> 5
    
  • bitset进行计数

    cout << bs2.count() << endl;    // 输出比特位一共有几个1,“0101”输出「2」
    cout << bs2.size() << endl;     // 输出长度,“0101”输出「4」
    
  • 检查bitset的每一位

    cout << bs2.any() << endl;      // 检查是否有任意一个比特位为1,输出「1」
    cout << bs2.all() << endl;      // 检查是否所有比特位都为1,输出「0」
    cout << bs2.none() << endl;     // 检查是否所有比特位都不为1,输出「0」
    
  • 修改bitset

    bs2.flip();             // 输出比特位的翻转
    cout << bs2 << endl;    // 输出「1010」
    
    bs2.set();              // 所有比特位设置为1
    cout << bs2 << endl;    // 输出「1111」
    
    bs2.reset();            // 所有比特位设置为0
    cout << bs2 << endl;    // 输出「0000」
    
上一篇:详解STL中关于bitset的使用方式


下一篇:CF 566E Restoring Map