C++ 位集及其应用?
server side programmingprogramming
位集是一种存储多个布尔值的数据集,但与可以存储一系列位(如布尔数组或布尔向量)的其他数据集相比,它占用的内存空间较少。
位集以占用较少内存空间的形式存储二进制位,它以压缩形式存储它们。访问任何元素与其他元素相同,即使用其索引值,即 bitset_name[index]。但位集中元素的索引是相反的。让我们举个例子,对于位集 {01101001},第 0 个索引处的元素为 1,依此类推。因此 0 位于索引 1、2、4、7。 1 位于索引 0、3、5、6。
让我们创建一个使用位集所有函数的程序 −
示例
#include <bits/stdc++.h> using namespace std; #define setSize 32 int main() { bitset<setSize> bset1; // 值为 00000000000000000000000000000000000 bitset<setSize> bset2(20); // 值为 000000000000000000000000000010100 bitset<setSize> bset3(string("1100")); // 值为 0000000000000000000000000000001100 cout<<"Bitset 的值为 :
" ; cout<<"bitset 1 : "<<bset1<<endl; cout<<"bitset 2 : "<<bset2<<endl; cout<<"bitset 3 : "<<bset3<<endl; cout << endl; bitset<8> bset4; // 值为 00000000 bset4[1] = 1; cout<<"更改一位后的值:"<<bset4<<endl; bset4[4] = bset4[1]; cout <<"使用其他方法更改值:"<<bset4<<endl; int numberofone = bset4.count(); int numberofzero = bset4.size() - numberofone; cout<<"集合<<bset4<<"有<<numberofone<<"个1和<<<numberofzero<<"个0
"; cout<<"< bset4<<"的 bool 表示:"; for (int i = 0; i < bset4.size(); i++) cout<< bset4.test(i)<<""; cout<< endl; if (!bset1.none()) cout << "bset1 设置了一些位
"; cout <<".set() 方法设置所有位,bset4.set() = "<< bset4.set() << endl; cout<<"将特定位(4)更改为 0 <<<bset4.set(4, 0)<<endl; cout<<<"将特定位 (4) 更改为 1 "<<bset4.set(4)<<endl; cout<<<"重置位置 2 处的位 :"<<bset4.reset(2)<<endl; cout<<<"重置完整位集的位 :"<<bset4.reset()<<endl; cout<<<"翻转位置 2 处的位 :"<< bset4.flip(2) << endl; cout<<"翻转数组的位:"<<bset4.flip()<< endl; int num = 100; cout << "
十进制数:" << num << " 二进制等价:" << bitset<8>(num); return 0; }
输出
Bitset 的值如下: Bitset 1:00000000000000000000000000000000000 Bitset 2:000000000000000000000000000010100 Bitset 3:000000000000000000000000000001100 更改一位后的值:00000010 使用其他方法更改值:00010010 set00010010 有 2 个 1 和 6 个 0 00010010 的 bool 表示:0 1 0 0 1 0 0 0 .set() 方法设置所有位,bset4.set() = 11111111 将特定位(4)更改为 0 11101111 将特定位(4)更改为 1 11111111 重置位置 2 处的位:11111011 重置完整位集的位:00000000 翻转位置 2 处的位:00000100 翻转数组的位:11111011 十进制数:100 二进制等价物:01100100