bitset类简介

    xiaoxiao2021-03-25  117

      有些程序要处理二进制位的有序集,每个位可能包含的是0(关)或1(开)的值。位是用来保存一组项或条件的yes/no信息(有时也称标志)的简洁方法。标准库提供了bitset类使得处理位集合更容易一些。要使用bitset类就必须要包含相关的头文件。在本书提供的例子中,假设都使用了std::bitsetusing声明:

    #include <bitset> using std::bitset; bitset 的定义和初始化

      类似于vectorbitset类是一种类模板而与vector不一样的是bitset类型对象的区别仅在其长度而不在其类型。在定义bitset时,要明确bitset含有多少位,须在尖括号内给出它的长度值:

    bitset<32> bitvec; //32位,全为0。 给出的长度值必须是常量表达式, 长度值必须定义为整型字面值常量或是已用常量值初始化的整数类型的 const 对象。这条语句把bitvec定义为含有32个位的bitset对象。和vector的元素一样,bitset中的位是没有命名的,只能按位置来访问它们。位集合的位置编号从0开始,因此,bitvec的位序是从031。以0位开始的位串是低阶位(low-order bit),以31位结束的位串是高阶位(high-order bit)

    初始化bitset对象的方法

    bitset<n> b;

    bn位,每位都为0

    bitset<nb(u);

    bunsigned longu的一个副本

    bitset<nb(s);

    bstring对象s中含有的位串的副本

    bitset<nb(sposn);

    bs中从位置pos开始的n个位的副本

    bitset操作

    b.any()

    b中是否存在置为1的二进制位?

    b.none()

    b中不存在置为1的二进制位吗?

    b.count()

    b中置为1的二进制位的个数

    b.size()

    b中二进制位的个数

    b[pos]

    访问b中在pos处的二进制位

    b.test(pos)

    b中在pos处的二进制位是否为1

    b.set()

    b中所有二进制位都置为1

    b.set(pos)

    b中在pos处的二进制位置为1

    b.reset()

    b中所有二进制位都置为0

    b.reset(pos)

    b中在pos处的二进制位置为0

    b.flip()

    b中所有二进制位逐位取反

    b.flip(pos)

    b中在pos处的二进制位取反

    b.to_ulong()

    b中同样的二进制位返回一个unsigned long

    os << b

    b中的位集输出到os

    转载请注明原文地址: https://ju.6miu.com/read-15128.html

    最新回复(0)