📜  C ++ STL中的位集test()(1)

📅  最后修改于: 2023-12-03 15:13:44.960000             🧑  作者: Mango

C++ STL中的位集test()

在C++ STL中,位集(bitset)是一种特殊的数组,用于存储二进制位。与bool类型的数组不同,位集并不会占用8倍的存储空间,它将每个元素存储为一个位。这就使得位集在许多情况下比常规数组更有效。

位集的定义

要使用位集,需要包含头文件<bitset>, 以下是创建位集的示例:

#include <bitset>
#include <iostream>

using namespace std;

int main()
{
    bitset<8> myBits; //创建8位的位集,默认值为0
    bitset<8> mySet1(5); //创建8位的位集,初始值为00000101
    bitset<8> mySet2("1010"); //从字符串创建8位的位集,初始值为00001010

    cout << "myBits: " << myBits << endl; //输出: myBits: 00000000
    cout << "mySet1: " << mySet1 << endl; //输出: mySet1: 00000101
    cout << "mySet2: " << mySet2 << endl; //输出: mySet2: 00001010

    return 0;
}

在上面的代码中,创建了3个不同的位集,分别是默认值为0的8位位集myBits,初始值为5的8位位集mySet1以及从字符串"1010"创建的8位位集mySet2

位集的常用操作
数组访问

位集支持用下标(索引)访问,下标从0开始,返回值为bool类型。

#include <bitset>
#include <iostream>

using namespace std;

int main()
{
    bitset<8> mySet("1010"); //从字符串创建8位的位集,初始值为00001010

    //通过数组访问
    cout << "mySet[0]: " << mySet[0] << endl; //输出: mySet[0]: 0
    cout << "mySet[1]: " << mySet[1] << endl; //输出: mySet[1]: 1
    cout << "mySet[2]: " << mySet[2] << endl; //输出: mySet[2]: 0
    cout << "mySet[3]: " << mySet[3] << endl; //输出: mySet[3]: 1

    return 0;
}
大小和计数

使用size()方法可以得到位集的大小,count()方法可以得到位集中为1的位数。

#include <bitset>
#include <iostream>

using namespace std;

int main()
{
    bitset<8> mySet("1010"); //从字符串创建8位的位集,初始值为00001010

    cout << "Size of mySet: " << mySet.size() << endl; //输出: Size of mySet: 8
    cout << "Count of 1's in mySet: " << mySet.count() << endl; //输出: Count of 1's in mySet: 2

    return 0;
}
位运算

与、或、异或、求反等位运算可以对位集进行操作,以下是示例代码:

#include <bitset>
#include <iostream>

using namespace std;

int main()
{
    bitset<8> mySet1("1010"); //从字符串创建8位的位集,初始值为00001010
    bitset<8> mySet2("0101"); //从字符串创建8位的位集,初始值为00000101

    cout << "mySet1 & mySet2: " << (mySet1 & mySet2) << endl; //输出: mySet1 & mySet2: 00000000
    cout << "mySet1 | mySet2: " << (mySet1 | mySet2) << endl; //输出: mySet1 | mySet2: 00001111
    cout << "mySet1 ^ mySet2: " << (mySet1 ^ mySet2) << endl; //输出: mySet1 ^ mySet2: 00001111
    cout << "~mySet1: " << (~mySet1) << endl; //输出: ~mySet1: 11110101

    return 0;
}
总结

本文介绍了C++ STL中的位集,包括创建、数组访问、大小和计数、位运算等常用操作。位集可以高效地存储二进制位,对于需要高性能的程序非常有用。