📅  最后修改于: 2023-12-03 15:13:44.960000             🧑  作者: Mango
在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中的位集,包括创建、数组访问、大小和计数、位运算等常用操作。位集可以高效地存储二进制位,对于需要高性能的程序非常有用。