STL之bitset学习

个人觉得bitset很不错,特别是转化成二进制,还可以将0-1字符串转化成bitset,而bitset可以直接输出,还可以转化成unsigned long 类型的值。个人认为操作不需要死记硬背,要使用的时候再查吧,毕竟标准库里面的操作有很多。
PS:第一次弄插图,技术不太好。要注意bitset的下标!!!!!!!看了图就会明白。
 1 #include<iostream>
 2  #include<string>
 3  #include<bitset>
 4  #include<cstddef>
 5  using namespace std;
 6  
 7  int main( )
 8  {
 9      bitset<10> b1;              //b1有10位,每位都是0;
10      bitset<10> b2(2);           //b2是unsigned long型2的一个副本
11      string s = "1100";
12      bitset<10> b3(s);           //b3是string对象s中含有的位串的副本
13      bitset<10> b4(s, 0, 4);     //b4是s中从位置0开始的4个位的副本
14      bitset<16> b5(0xffff);      //从0到15位都是1;注意每一个0xf可表示为“1111”;
15      bitset<32> b6(0xffff);      //从0到15位都是1,16到31都为0;
16      bitset<128> b7(0xffff);     //从32到127位都为0;
17      cout << b1 << endl;
18      cout << b2 << endl;
19      cout << b3 << endl;
20      cout << b4 << endl;
21      cout << b5 << endl;
22      cout << b6 << endl;
23      cout << b7 << endl;
24      string str("1111111000000011001101");
25      bitset<32> bitvec5(str, 5, 4);
26      bitset<32> bitvec6(str, str.size() - 4);
27     
28      bool is_set = b1.any();     //any操作为判断b中是否存在置为1的二进制。false代表全部都为0
29      bool is_no_set = b1.none(); //none操作为判断b中是否不存在置为1的二进制。true代表全部都为0
30      size_t count = b3.count();
31      size_t sz = b3.size();
32      cout << count << endl;
33      cout << sz << endl;         //count操作为统计b中置为1的数目,size操作为统计b中二进制的个数。它们返回值的类型为size_t,和vector和string的size操作返回值一样。
34                                  //注意严谨,虽然用int型也可以。但是要谨记。
35      for(int i = 0; i != 10; ++i)
36      b1[i] = 1;
37      for(int i = 0; i != 10; ++i)
38      cout << b1[i] << " ";      //可以通过下标来访问b和设置值
39      cout << endl;
40      b1.reset();
41      cout << b1 << endl;
42      b1.set();
43      cout << b1 << endl;        //set操作为将所有位置置为1;reset操作为将所有位置置为0;
44      for(int i = 0; i != 10; ++i)
45      b1.reset(i);
46      cout << b1 << endl;
47      for(int i = 0; i != 10; ++i)
48      b1.set(i);
49      cout << b1 << endl;         //还能通过下标
50      b1.flip();
51      cout << b1 << endl;         //flip操作为将所有二进制位取反
52      for(int i = 0; i != 10; ++i)//同样可以通过下标
53      b1.flip(i);
54      cout << b1 << endl;
55      unsigned long l = b1.to_ulong();
56      cout << l << endl;          //to_ulong操作为返回一个unsigned long值
57      return 0;
58  }

posted @ 2012-09-11 13:09  alan_forever  阅读(194)  评论(0编辑  收藏  举报