zoukankan      html  css  js  c++  java
  • STL容器 -- Bitset

    核心内容:Bitset 是 STL 中的二进制容器, 存放的时 bit 位元素, 每一位只占一个 bit 位, 取值 0 或者 1, 可以像整形元素一样按位与或非, 并且大大优化了时间和空间复杂度.

    头文件: #include <bitset>

    构造方法:

    1 bitset<length> b  //b为bitset对象,它能容纳length个bit位,每个元素初值为0
    2 bitset<length> b(unsigned long u)  //b有length位,并用u赋值;如果u超过n位,则顶端被截除
    3 bitset<length> b(string s) //以字符串 s 初始化长度为 length 的 b, s 必须仅包含01
    4 bitset<length> b(string s, pos)  // b是 s 中从位置 pos 开始位的副本,前面的多余位自动填充0
    5 bitset<length> b(s, pos, num)  //b是s中从位置pos开始的num个位的副本,如果num<n,则前面的空位自动填充0
    6 cin >> b   //如果输入的不是0或1的字符,只取该字符前面的二进制位.

    常用操作:

    b.any( )   //b 中是否存在值为 1 的二进制位
    b.none( )  //b 中是否不存在值为 1 的二进制位
    b.set()   //对 b 中全部元素设置为 1
    b.reset() //对 b 中全部元素设置为 0
    b.set(pos) //即 b[pos] = 1
    b.set(pos, value) //即 b[pos] = value
    b.reset(pos)   //即 b[pos] = 0
    b.to_string()      //返回 b 的 string 表示法
    b.to_ulong     //返回 b 的 long 型表示法
    b.count()     //返回二进制为 1 的个数
    b.size()    //二进制位的个数
    b.flip()   //所有二进制位按位取反
    b.flip(pos)  //处于 pos 位置的数取反
    b.test(pos)  //在pos处的二进制位是否为1?

    常见运算:

    b1 = b2 & b3;    //按位与
    b1 = b2 | b3;     //按位或
    b1 = b2 ^ b3;    //按位异或
    b1 = ~b2;          //按位补
    b1 = b2 << 7;    //移位
  • 相关阅读:
    P3704 [SDOI2017]数字表格
    CF 700 E. Cool Slogans
    杜教筛学习笔记
    [BOI2004]Sequence 数字序列(左偏树)
    [WC2007]剪刀石头布(最大流)
    [NOI2009]变换序列(二分图匹配)
    文理分科(最小割)
    上帝与集合的正确用法(欧拉定理)
    [HAOI2008]圆上的整点(数论)
    主席树学习笔记
  • 原文地址:https://www.cnblogs.com/Ash-ly/p/5890024.html
Copyright © 2011-2022 走看看