• 「STL」bitset正传


    前言


    之前一些需要转二进制来解决的题目我看到很多大佬用了bitset。

    然而我并不会这东西。看上去很高级的样子……

    改题改累了来学习一下233。

    正文


    一、bitset的构造

    bitset有三种构造方式:string构造、整数构造和无参构造(自己瞎yy的名字)

    1.无参构造:默认每一位为0。

    具体代码实现:

    bitset <10> a;

    构造结果:0000000000

    2.string构造:与char数组构造大致相同。也是附上一个01串作为bitset构造的参量传入。

    具体代码实现:

    string str="010110";
    bitset <10> b(str);

    构造结果:0000010110

    3.整数构造:传入一个整数,bitset会自动转化成二进制数保存。

    具体代码实现:

    bitset <10> c(12);

    构造结果:0000001100

    二、bitset的基本运算

    bitset支持所有的位运算。在这里不一一进行演示。举一个异或的例子:

    具体代码实现:

    bitset <20> a(string("10101101"));
    bitset <20> b(string("10101100"));
    cout<<(a^b)<<endl;

    输出结果:00000000000000000001

    三、bitset的访问和赋值

    1.bitset可以通过"[""]"来访问每一位的值。

    具体代码实现:

    bitset <10> a("1011");
    cout<<a[1]<< endl;//输出1

    通过这一方法也可以对某一个位置进行赋值。

    2.通过bitset自带函数test进行访问(据说和上面的访问方式比可以避免访问越界问题)

    具体代码实现:

    bitset <10> a("1011");
    cout<<a.test(0)<<endl;

    3.通过bitset自带函数set、reset进行赋值

    set无参时将所有位全部置成1,reset相反。参数为位置。加入参数会将对应的位置+1置成0/1。

    另外,当set函数指定两位参数时,意义为将第一参数位+1的元素置为第二参数的值。

    具体代码实现:

    bitset <10> a;
    a.set();    //1111111111
    a.reset();  //0000000000
    a.set(3);   //0000001000
    a.set(4);   //0000011000
    a.reset(3); //0000010000
    a.set(4,0); //0000000000

    并没有实测不过大概是这样吧……(逃

    四、其他基本函数

    count():返回1的个数

    any():返回是否有1

    none():返回是否没有1

    flip():全部取反

    flip(p):将第p+1位取反

    to_ulong():返回它转换为unsigned int的结果,如果超出范围则报错

    to_ullong():返回它转换为unsigned long long的结果,如果超出范围则报错

    to_string():返回它转换为string的结果

  • 相关阅读:
    应用js改变问章字体大小
    在北京实习的日子
    php算法
    SQL Server 查询处理中的各个阶段(SQL执行顺序)
    130 个你需要了解的 vim 命令
    分享一个检测用户是否用手机(Mobile)访问网站的 PHP 类
    使用apache自带日志分割模块rotatelogs,分割日志
    centos下lvs配置
    分享codeigniter框架,在zend studio 环境下的代码提示
    vi 常用命令
  • 原文地址:https://www.cnblogs.com/xingmi-weiyouni/p/11496504.html
Copyright © 2020-2023  润新知