Chinaunix首页 | 论坛 | 博客
  • 博客访问: 246928
  • 博文数量: 108
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 314
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-29 10:58
文章分类

全部博文(108)

文章存档

2015年(20)

2014年(88)

我的朋友

分类: C/C++

2014-07-09 21:28:10

标准库类型(四)

--biteset


序言:

    位是用来保存一组项或条件的yes/no信息[标识]的简洁方法。


  1. #include   
  2. using std::bitset;  


正文:

1bitset对象的定义和初始化

    和vector对象不同的是:bitset类型对象的区别在于其长度而不是类型。在定义bitest时,要在尖括号中说明给出他的长度。

  1. bitset<32> bitvec;  

  1. //四种初始化bitset的方法  
  2.     bitset b;  
  3.     bitset b(u);  
  4.     bitset b(string);  
  5.     bitset b(string,pos,m);  

2、位集合的位置编号从0开始,但是,他的顺序是从右往左排的!以0位开始的位串是低阶位,以n结尾的是高阶位!



  1. //用unsigned值初始化bitset对象  
  2.     bitset<128> b(0Xffff);  
  3.     bitset<32> b(0Xffff);  
  4.     bitset<16> b(0Xffff);  
  5.     bitset<16> b(10);  

  1. /* 
  2. *用string对象初始化bitset对象 
  3. *仍然是从右往左:string对象的最右边字符,用来初始化bitset对象的低阶位! 
  4. */  
  5.     string str("1100");  
  6.     bitset<16> b(str);  
  7.     string str("1000110011101111");  
  8.     bitset<4> b(str); //从左边开始截取  

  1. /* 
  2. *截取的是1101 
  3. *但是保存的时候是从右往左填充bitset对象 
  4. */  
  5.     string str("1000110111101111");  
  6.     bitset<32> b(str,5,4);  

  1. /* 
  2. *截取01111 
  3. *然后从右往左填充 
  4. */  
  5.     string str("1000110011101111");  
  6.     bitset<32> b(str,str.size() - 5);  


3size_t类型

    size_t类型是一个与机器相关的unsigned类型,其大小足以保证存储内存中对象的大小!

  1. size_t sz = bitvec.size();  

4bitset对象上的操作

  1. bool is_set = bitvec.any();  
  2. bool is_not_set = bitvec.none();  
  3. size_t sz = bitvec.count();  

  1. for (size_t i = 0;i < bitvec.size(); ++i)  
  2.     bitvec[i] = 1;  
  3. for (size_t i = 0;i != bitvec.size(); ++i)  
  4. {  
  5.     bitvec.set(i);  
  6. }  
  7. bitvec.set();  
  8. bitvec.reset();  

  1. for (size_t i = 0;i != bitvec.size(); ++i)  
  2. {  
  3.     if (bitvec[i])  
  4.         cout << 1 ;  
  5.     else  
  6.         cout << 0 ;  
  7. }  
  8. for (size_t i = 0;i != bitvec.size(); ++i)  
  9. {  
  10.     if (bitvec.test(i))  
  11.         cout << 1 ;  
  12.     else  
  13.         cout << 0 ;  
  14. }  



5、获取bitset对象的值


  1. unsigned long value = bitvec.to_ulong();  

  1. //观察程序  
  2. int main()  
  3. {  
  4.     string str("00001000110011101111");  
  5.     bitset<20> bitvec(str);  
  6.   
  7.     for (size_t i = 0;i != bitvec.size(); ++i)  
  8.     {  
  9.         if (bitvec.test(i))  
  10.             cout << 1 ;  
  11.         else  
  12.             cout << 0 ;  
  13.     }  
  14.     cout << endl;  
  15.     cout << bitvec << endl;  
  16. }  
  1. "276569" snippet_file_name="blog_20140405_12_2743648">"276569" snippet_file_name="blog_20140405_13_1191269" name="code" class="cpp">"276569" snippet_file_name="blog_20140405_13_1191269">  
  2.   
  3.   
  4.   
  5.   
  6.   
  7.   
  8.   
  9.  
  10. 转载:http://blog.csdn.net/zjf280441589/article/details/22988205
阅读(1102) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~