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 表达。
原文链接: https://www.cnblogs.com/yanghh/p/12944450.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;
也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/350425
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!