• STL中bitset的用法


    终于又来写博客了 ==

    bitset存储的是二进数位,就和一个bool性数组差不多。用法上和数组的操作方式也差不多。

    每位只占一个字节,大大优化了空间,可以通过数组形式访问。

    bitset定义

    可以用以下几种方式定义bitset,值得注意的是,bitset在定义的时候必须定义大小,这里8便是我们定义的长度,定义一个空bitset时所有值默认为0;

    1     bitset<8> b;
    2     bitset<8> bit(8);
    3     bitset<8> tp1(string("01010101"));
    4     bitset<8> tp2(bit);
    5 
    6     cout << "  b = " << b << endl;
    7     cout << "bit = " << bit << endl;
    8     cout << "tp1 = " << tp1 << endl;
    9     cout << "tp2 = " << tp2 << endl;

    上面代码的输出结果为

    1   b = 00000000
    2 bit = 00001000
    3 tp1 = 01010101
    4 tp2 = 00001000

    bitset的运算

    猜都能猜到bitset肯定是支持位运算的,是的bitset可以直接做位运算

     1     bitset<4> tp1(string("0101"));
     2     bitset<4> tp2(string("1110"));
     3 
     4     cout << "(tp1 & tp2) = " << (tp1 & tp2) << endl;
     5     cout << "(tp1 | tp2) = " << (tp1 | tp2) << endl;
     6     cout << "(tp1 ^ tp2) = " << (tp1 ^ tp2) << endl;
     7     cout << "(~tp1) = " << (~tp1) << endl;
     8 
     9     cout << "(tp1 &= tp2) = " << (tp1 &= tp2) << endl;
    10     cout << "(tp1 |= tp2) = " << (tp1 |= tp2) << endl;
    11     cout << "(tp1 ^= tp2) = " << (tp1 ^= tp2) << endl;
    12 
    13     cout << "(tp1 <<= 1) = " << (tp1 <<= 1) << endl;
    14     cout << "(tp1 ^= tp) = " << (tp1 ^= 4) << endl;
    15 
    16     cout << "(tp1 == tp2) = " << (tp1 == tp2) << endl;
    17     cout << "(tp1 != tp2) = " << (tp1 != tp2) << endl;

    这就没什么好说的了,运行结果为

     1 (tp1 & tp2) = 0100
     2 (tp1 | tp2) = 1111
     3 (tp1 ^ tp2) = 1011
     4 (~tp1) = 1010
     5 (tp1 &= tp2) = 0100
     6 (tp1 |= tp2) = 1110
     7 (tp1 ^= tp2) = 0000
     8 (tp1 <<= 1) = 0000
     9 (tp1 ^= tp) = 0100
    10 (tp1 == tp2) = 0
    11 (tp1 != tp2) = 1

    bitset的函数

    既然也是STL的东西,肯定会封装了一下函数,bitset是没有迭代器的。

    常用函数有

     1     bit.size();        //返回大小(长度)
     2     bit.count();    //返回1的个数
     3     bit.any();        //返回是否有1
     4     bit.none();        //返回是否没有1
     5     bit.set();        //全部置为1
     6     bit.set(p);        //将p+1(下标从0开始!!)位置为1
     7     bit.set(p,n);    //将p+1位置为n
     8     bit.reset();    //全部置为0
     9     bit.reset(p);    //将p+1位置为0
    10     bit.flip();        //全部取反 等同于 (~bit)
    11     bit.flip(p);    //将p+1位取反
    12     bit.to_ulong();    //返回转换为 unsigned long  的结果,超范围会报错
    13     bit.to_ullong();//返回转换为 unsigned long long 的结果,超范围报错
    14     bit.to_string();//返回转换为 string 的结果

    当题目涉及到位运算时,就可以使用bitset快速的在整形,string,二进制三种类型中完成操作转换。并且可以在某些数据结构中直接套用bitset完成二进制的对位操作。还有就是bitset很好用。完XD

    STL的容器基本讲的差不多了。熟练掌握STL好处我也就不多说了= = ,自己在做题的过程中慢慢琢磨熟练吧。

  • 相关阅读:
    [翻译]使用设计模式简化.NET中菜单和Form元素之间的关系
    [AWDwR4]13章出错 protect_against_forgery
    使用存储过程(22)
    建立数据库连接(19)
    对数据库添加数据(21)
    ADO.NET常用对象(18)
    数据展现Repeater控件(25)
    content控件(24)
    对数据库增加数据(21)
    行为存储过程(23)
  • 原文地址:https://www.cnblogs.com/xenny/p/9549002.html
Copyright © 2020-2023  润新知