bitset
2012-08-13 21:20 残月星辰 阅读(320) 评论(0) 编辑 收藏 举报有些程序要处理二进制位的有序集,每一个位可能包含0 1值。位是用来保存一组项或条件的yes/no信息的简介方法。标准库提供的bitset类简化了位集的处理。
头文件及其声明:
#include<bitset>
using std::bitset;
bitset对象的初始化和定义
bitset<n> b; | b有n位,每位都0 |
bitset<n>b(u); | b是unsigned long 型u的一个副本 |
bitset<n>b(s); | b是string对象s中含有的位串的副本 |
bitset<n>b(s,pos,n); | b是s中从位置pos开始的&nbps;n个位副本 |
bitset<32>bitves://32位,全部都是0;
用string对象初始化bitset对象
string对象直接表示为位模式。从string对象读入位集的顺序是从右向左:
string strval("1100");
bitset<32> bitvect(strval);
string对象和bitset对象之间是反向转化:string对象的最右边字符(即下标最大的那个字符)用来初始化bitset对象的低阶位
(即下标为0位)。当用string对象初始化bitset对象时,要记住这一差别。
例1:
View Code
1 #include<iostream> 2 #include<string> 3 #include<bitset>//bitset头文件 4 using namespace std; 5 using std::string; 6 using std::bitset; 7 int main() 8 { 9 string str("1001001100") ; 10 bitset<32>bitvec5(str,6,4); 11 cout<<bitvec5<<endl; 12 return 0; 13 }
输出结果:
这里用str从第六位的1开始 取四位 1100 ,bitvec5的从3到0的二进制位置1100,其他二进制都置为0。
例2:
View Code
1 #include<iostream> 2 #include<vector>//包含头文件 3 #include<string> 4 #include<bitset> 5 using namespace std; 6 using std::string; 7 using std::vector; 8 using std::bitset; 9 int main() 10 { 11 string str("1001001100") ; 12 bitset<32>bitvec5(str,str.size()-4);//use last 4 13 cout<<bitvec5<<endl; 14 return 0; 15 }
输出结果:
本例中,取出str末尾的四位来对bitvec5的低四位进行初始化。bitvec5其余的位初始化为0.
bitset对象上的操作
b.any() | b中是否存在置为1的二进制? |
b.none() | b中不存在置为1的二进制位? |
b.count() | b中置为1的二进制的个数 |
b.size() | b中二进制位的个数 |
b[pos] | 访问b中的pos处二进制 |
b.test(pos) | b中在pos处的二进制位置为1吗? |
b.set() | 把b中所有二进制都置为1 |
b.set(pos) | 把b中在pos处的二进制位置为1 |
b.reset() | 把b中所有二进制位都置为0 |
b.reset(pos) | 把b中在pos处的二进制位置为0 |
b.flip() | 把b中在pos处的二进制位取反 |
b.to_ulong() | 把b中同样的二进制位返回一个unsign long值 |
os<<b | 把b中的位集输出到os流 |