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; }