STL-bitset使用方法
文章目录
- STL-bitset使用方法
容器描述:
bitset
是一种特殊的数组,它的每一个元素只能是0或1。每个元素只占用1bit空间,所以它是一种空间效率极高的数据结构。bitset
在处理大量的位级数据时非常有用。
使用方法:
首先,你需要包含头文件#include <bitset>
,然后声明一个bitset
对象,如std::bitset<10> b;
。这将创建一个可以存储10位的bitset
。
底层实现:
bitset
的底层实现通常是一个或多个unsigned long
类型的数组。每个unsigned long
可以存储多个位,具体取决于系统中unsigned long
的大小。例如,在一个32位系统中,一个unsigned long
可以存储32个位。
支持操作:
操作名 | 效果 | 传入参数 | 操作返回值 |
---|---|---|---|
set() | 将所有位设置为1 | 无 | 返回bitset引用 |
set(size_t pos, bool val = true) | 将指定位设置为val | pos: 位的位置,val: 要设置的值 | 返回bitset引用 |
reset() | 将所有位设置为0 | 无 | 返回bitset引用 |
reset(size_t pos) | 将指定位设置为0 | pos: 位的位置 | 返回bitset引用 |
flip() | 翻转所有位 | 无 | 返回bitset引用 |
flip(size_t pos) | 翻转指定位 | pos: 位的位置 | 返回bitset引用 |
operator[] | 访问指定位 | pos: 位的位置 | 返回指定位的引用 |
count() | 返回1的数量 | 无 | 返回1的数量 |
size() | 返回位的数量 | 无 | 返回位的数量 |
test(size_t pos) | 检查指定位是否为1 | pos: 位的位置 | 如果指定位为1,返回true;否则,返回false |
any() | 检查是否有位为1 | 无 | 如果有位为1,返回true;否则,返回false |
none() | 检查是否没有位为1 | 无 | 如果没有位为1,返回true;否则,返回false |
常用示例:
#include <bitset>
#include <iostream>int main() {std::bitset<8> b;b.set(1);b.flip(2);std::cout << "b = " << b << std::endl;std::cout << "b[1] = " << b[1] << std::endl;std::cout << "b.count() = " << b.count() << std::endl;return 0;
}
经常产生的问题:
bitset
的大小在编译时需要确定,不能在运行时动态改变。bitset
不支持迭代器。- 如果需要处理的位数超过了
bitset
的大小,会抛出std::out_of_range
异常。