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

   运算符

扫描二维码关注公众号,回复: 11254735 查看本文章
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 表达。

  

  

猜你喜欢

转载自www.cnblogs.com/yanghh/p/12944450.html