zoukankan      html  css  js  c++  java
  • bitset

    1. 基本介绍

       std::bitset 是标准库中的一个存储 0/1 的大小不可变容器。严格来讲,它并不属于 STL。

       由于内存地址是按字节即 byte 寻址,而非比特 bit ,一个 bool 类型的变量,虽然只能表示 0/1 , 但是也占了 1 byte 的内存。

       bitset 就是通过固定的优化,使得一个字节的八个比特能分别储存 8 位的 0/1 。

       对于一个 4 字节的 int 变量,在只存 0/1 的意义下, bitset 占用空间只是其1/32,计算一些信息时,所需时间也是其1/32

       当然, vector 的一个特化 vector<bool> 的储存方式同 bitset 一样,区别在于其支持动态开空间。

    2. 使用

       头文件及定义如下:

    #include <bitset>
    bitset<1000> bs;   // a bitset with 1000 bits
    

       构造函数

    bitset()                  : 每一位都是 false
    bitset(unsigned long val) : 设为 val 的二进制形式
    bitset(const string& str) : 设为串 str
    

       运算符

    operator []                : 访问其特定的一位
    operator ==/!=             : 比较两个 bitset 内容是否完全一样
    operator &/&=/|/| =/^/^=/~ : 进行按位与/或/异或/取反操作。 bitset 只能与 bitset 进行位运算 ,若要和整型进行位运算,要先将整型转换为 bitset
    operator <</>>/<<=/>>=     : 进行二进制左移/右移
    operator <</>>             : 流运算符,这意味着你可以通过 cin/cout 进行输入输出
    

       成员函数

    count()              : 返回 true 的数量
    size()               : 返回 bitset 的大小。
    test(pos)            : 它和 vector 中的 at() 的作用是一样的,和 [] 运算符的区别就是越界检查
    any()                : 若存在某一位是 true 则返回 true ,否则返回 false
    none()               : 若所有位都是 false 则返回 true ,否则返回 false
    all()                : C++11 ,若所有位都是 true 则返回 true ,否则返回 false
    set()                : 将整个 bitset 设置成 true
    set(pos, val = true) : 将某一位设置成 true / false
    reset()              : 将整个 bitset 设置成 false
    reset(pos)           : 将某一位设置成 false 。相当于 set(pos, false)
    flip()               : 翻转每一位,相当于异或一个全是1的 bitset
    flip(pos)            : 翻转某一位。
    to_string()          : 返回转换成的字符串表达。
    to_ulong()           : 返回转换成的 unsigned long 表达
    to_ullong()          : C++11 ,返回转换成的 unsigned long long 表达。
    

      

      

  • 相关阅读:
    VS2019正式版 密钥 Visual Studio 2019 破解 激活码 Key
    关于随机数的前世今生
    木兮的纪中集训感想
    浅谈欧洲算法——模拟退火
    你没听过的梅森旋转算法
    二分贪心杂题
    DP专项训练
    实验八 进程间通信
    实验七 信号
    实验六 进程基础
  • 原文地址:https://www.cnblogs.com/yanghh/p/12944450.html
Copyright © 2011-2022 走看看