bitset类模板支持有效的的固定大小位设置操作,vector<bool>模板规范支持动态大小的位字符串。
bitset应用举例(从右到左读入位数)
#include <iostream>
#include <bitset>
#include <string>
using namespace std;
const size_t NBITS = 36;
void print(const bitset<NBITS>&);
main()
{
bitset<NBITS> b;
cout.setf(ios::boolalpha);
int i;
//偶数位置位
for (i=0; i<b.size(); i+=2)
b.set(i);
print(b);
//高位取反
for (i=b.size()/2; i<b.size(); ++i)
b.flip(i);
print(b);
//复位低位
for (i=0; i<b.size()/2; ++i)
b.reset(i);
print(b);
//读一个位字符串
cout << "Enter a bit string:";
string s;
cin >> s;
bitset<NBITS> b2(s);
print(b2);
//测试any()和 test()
cout << "any?" << b2.any() << endl;
cout << "test(0)?" << b2.test(0) << endl;
//取反,复位和置位
b2.flip();
print(b2);
b2.reset();
print(b2);
b2.set();
print(b2);
}
void print(const bitset<NBITS>& b)
{
cout << b.to_string() << "(" << b.count() << ")/n";
}
vector<bool>应用举例(从左到右读入位数)
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
void print_alpha(const vector<bool>&);
void print_digits(const vector<bool>&);
main()
{
vector<bool> b;
//增加
b.resize(4); //"0000"
b[0] = 1; //"1000"
b[3] = true; //"1001"
//按布尔值打印
print_alpha(b);
//用数字打印
print_digits(b);
//在前面插入更多(以LIFO顺序)
for (int i=0; i<5;++i)
b.insert(b.begin(),bool(i%2));
print_digits(b);
//单独位的存取
b[1] = false;
b[2] = 0;
print_digits(b);
//调整大小
b.resize(5);
print_digits(b);
}
void print_alpha(const vector<bool>& b)
{
cout.setf(ios::boolalpha);
copy(b.begin(),b.end(),ostream_iterator<bool>(cout,""));
cout << endl;
}
void print_digits(const vector<bool>& b)
{
cout.unsetf(ios::boolalpha);
copy(b.begin(),b.end(),ostream_iterator<bool>(cout,""));
cout << endl;
}