目录
STL位标志的使用
Bitset注意事项
位可以存储两种状态:要么是已设置(1),要么是重置(0)。
Bitset的STL算法
Bitset部分:代码示例
部分一
#include <iostream>
#include <bitset>
#include <vector>
using namespace std;
int main()
{
bitset<4> BitFlag1("1101"),BitFlag2(1000),BitFlag3(0b0010); // Bitset中的元素要么为1要么为0
bitset<4> BitFlag4(BitFlag1^BitFlag2);
cout << BitFlag1 << endl;
cout << BitFlag1.flip() << endl; // 全部按位取反
cout << BitFlag3 << endl;
cout << BitFlag3[1] << endl; // 用下标访问元素
cout << (BitFlag1 & BitFlag2^BitFlag3 | BitFlag4) << endl;
cout << "BitFlag1中1的个数是" << BitFlag1.count() << endl;
cout << "将BitFlag4的第0位置0,得" << BitFlag4.reset(1) << endl;
cout << "将BitFlag4的第0位置1,得" << BitFlag4.set(1) << endl;
}
部分二
#include <vector>
#include <bitset>
#include <iostream>
#include <string>
using namespace std;
int main()
{
bitset<4> BitFlag1(3), BitFlag2(8), BitFlag3;
BitFlag3 = BitFlag1.to_ullong() + BitFlag2.to_ullong(); // to_ullong将二进制变量转化为十进制无符号长长整型(unsigned long long)变量
cout << BitFlag3.to_ulong() << endl; // 与to_ullong功能一样,将二进制变量转换为unsigned long型的变量
string Num = to_string(8 + 7); // to_string用于将bitset类型的变量转换为string类型的变量
cout << Num + "sss" << endl; // 此时Num变成了string类型的字符串
}
Bitset部分:结果显示
我们会发现:BitFlag为1101,但是在内存中是倒序存在的为1011.
Bitset与vector<bool>的异同点
异 |
Bitset只能包含有限的位进行运算,因此我们在用bitset之前必须要明确包含的位数,而vector<bool>可以动态地扩展内存理论上来讲可以包含无限的位进行运算,前者可进行位运算,后者则不可。 |
同 |
Bitset与vector<bool>中包含的元素都是1或者0 。 |
Vector<bool>部分:代码示例
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<bool> VectorBoolArray1{ 1,1,0,1 },VectorBoolArray2;
VectorBoolArray1.flip(); // 按位取反
VectorBoolArray2.push_back(1);
VectorBoolArray2.push_back(0);
VectorBoolArray2.push_back(0);
VectorBoolArray2.push_back(0);
VectorBoolArray2[2] = 1;
VectorBoolArray2.at(1) = 0;
}
// STL算法均适用于vector<bool>,除此之外还多了一个其他vector容器没有的函数:flip按位取反函数.
Vector<bool>部分:结果显示
我们发现:vector<bool>存储bool变量的顺序与变量输入顺序相同,不同于bitset的颠倒排列。