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 }