标准模板库(STL)学习探究之bitset容器

来源:互联网 发布:matlab有linux版本吗 编辑:程序博客网 时间:2024/04/24 17:14

                  C++ Bitset (位集合)
   
    C++ Bitsets给程序员提供一种位集合的数据结构。Bitsets使用许多二元操作符,比如逻辑和,或等。bitset类模板支持有效的的固定大小位设置操作,vector模板规范支持动态大小的位字符串。
函数列表:
Constructors 创建新bitsets 
Operators 比较和赋值bitsets 
any() 如果有任何一个位被设置就返回true 
count() 返回被设置的位的个数 
flip() 反转bits中的位 
none() 如果没有位被设置则返回true 
reset() 清空所有位 
set() 设置位 
size() 返回可以容纳的位的个数 
test() 返回指定位的状态 
to_string() 返回bitset的字符串表示 
to_ulong() 返回bitset的整数表示

/////////////////////////////////////////////////////////////////////////////////////

Constructors 
语法: 
bitset();
bitset(unsigned long val);
explicit bitset(const string& str,
    size_t pos = 0, size_t n = -1);
1.C++ Bitsets能以无参的形式创建.
2.用一个长无符号整数,它将被转化为二进制(若val<0,虽会被转化为补码形式,但编译器会把它看做某个长无符号整数的真值),然后插入到bitset中。当创建bitset时,模板中提供的数字决定bitset有多长。
3.用一个二进制位字符串以pos为起始点的n个位字符初始化bitset对象。当n=-1时,初始化的位字符个数为strlen(str).若strlen(str)>bitset的固定大小,str将被截断。
示例:
#include<iostream>
#include<bitset>
using namespace std;
void main()
{
   bitset<8> bs;
   // 显示这个bitset
  for( int i = (int) bs.size()-1; i >= 0; i-- ) {
    cout<<bs[i]<< " ";
  }
  cout<<endl;
  // 创建另一个bitset
  bitset<8> bs2( (long) 131 );
  // 显示
  for( int j = (int) bs2.size()-1; j >= 0; j-- ) {
    cout << bs2[j] << " ";
  }
  cout<<endl;
  bitset<8>bs3("1001010",0,strlen("1001010"));//位串
  for( int k = (int) bs3.size()-1; k >= 0; k-- ) 
  {
    cout << bs3.at(k) << " ";
  }
  cout<<endl;
}
输出结果:
0 0 0 0 0 0 0 0
1 0 0 0 0 0 1 1
0 1 0 0 1 0 1 0

Operators 
语法: 
  !=, ==, &=, ^=, |=, ~, <<=, >>=, []
这些操作符都可以和bitsets一起工作。它们被这样定义: 
!= 如果两个bitset不相等,返回真。 
== 如果两个bitset相等,返回真。 
&= 完成两个bitset间的与运算。 
^= 完成两个bitset间的异或运算。 
|= 完成两个bitset间的或运算。 
~ 反置bitset (和调用 flip()类似) 
<<= 把bitset向左移动 
>>= 把bitset向右移动 
[x] 返回第x个位的引用

示例:
// 创建一个bitset
  bitset<8> bs( (long) 131 );
  cout << "bs is " << bs2 << endl;
  // 向左移动4位
  bs <<= 4;
  cout << "now bs is " << bs << endl;
  bs >>= 4;
  cout << "now bs is " << bs << endl;
 当上述代码运行时,显示:
  bs2 is 01110001
  now bs2 is 00010000
  now bs2 is 00000001

bool any();
any()如果有位被设置为1,函数返回真,否则返回假
size_type count();
count()函数bitset中被设置成1的位的个数。

bitset &flip();
bitset &flip( size_t pos );
flip()函数反置bitset中所有的位,即将1设为0,0设为1。如果指定pos,那么只有pos上的位被反置
bool none() const;
none()如果没有位被设为1,返回真;否则返回假。

bitset &set();
bitset &set( size_t pos, int val=1 );
set()函数重新设置bitset上所有的位(各位全清为1),然后返回bitset。如果指定pos,那么只有pos(最低位为0位)上的位被设置。
size_t size();
size()返回bitset能容纳的位。
bool test( size_t pos );
test()函数返回在pos上的位的值。
示例:
bitset<8> bs2( (long)6 );
cout << bs2.test(1) << endl;
输出:1

string to_string();
to_string()函数返回bitset的字符串形式。
unsigned long to_ulong();
to_ulong()返回bitset的无符号长整数形式。
示例:
bitset<8> bs1( (long)6 );
cout << bs1.to_string() << endl;
cout << bs1.to_ulong() << endl;
输出结果:
00000110
6

原创粉丝点击