Bitset用法

众所周知Bitset可以将一些O(n)的操作优化为O(N/w)
相当于优化了>=一只log!!!

bitset每一位占一个bit,而不是一个Byte!!!
若一次操作复杂度为 O(N)
bitset的操作复杂度为 O(N/w) w为计算机字长,w位系统字长为w
相比之下,空间也更优,为O(N/w)

Warning:标号与对应顺序相反

如 11110111 对应 标号76543210

一些函数

询问函数

  bitset<8> s("10011011"); //用字符串直接赋值 8为大小
  s.count()  //5  求bitset中1的位数
  s.size()   //8  求bitset的大小

  s.test(0)  //true   用来查下标处的元素是0还是1
  s.test(2)  //false  同理,s[2]为0,返回false

  s.any()   //true   any函数检查bitset中是否有1
  s.none()   //false  none函数检查bitset中是否没有1
  s.all()    //false  all函数检查bitset中是全部为1

  s.flip(x)  //将x标号对应的数取反
  s.flip()   //全取反

赋值函数

  bitset<N> s; //s大小为N
  s.reset(x) //将x赋值为0
  s.reset()  //全不重置为0
  s.set(x)   //将x赋值为1
  s.set()    //全不重置为1
  s[i]=1     //将bitset的第i位标记为1

转型函数

  s.to_string() //将bitset转换成string类型
  s.to_ulong    //将bitset转换成ul类型  长度不超过log(MAX_ul)
  s.to_ullong   //将bitset转换成ull类型 长度不超过log(MAX_ull)

Warning:bitset可以按位进行位运算
如:

      bitset<4> s(string("1001"));
      bitset<4> bar(string("0011"));
      s^=bar       // (s对bar按位异或后赋值给s)
      s&=bar       // (按位与后赋值给s)
      s|=bar       // (按位或后赋值给s)
      s<<=2        // (左移2位,低位补0,有自身赋值)
      s>>=1        // (右移1位,高位补0,有自身赋值)
      ~bar         // (按位取反)
      bar<<1       // (左移,不赋值)
      bar>>1       // (右移,不赋值)
      s==bar       // (1001==0011为false)
      s!=bar       // (1001!=0011为true)
      s&bar        // (按位与,不赋值)
      s|bar        // (按位或,不赋值)
      s^bar        // (按位异或,不赋值)
posted @   Diamondan  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示