您的位置:首页 > 其它

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

2011-11-07 20:20 453 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: