zoukankan      html  css  js  c++  java
  • STL— bitset

    转自:https://www.cnblogs.com/xenny/p/9549002.html

    一,概述

    C++的 bitset 在 <bitset> 头文件中,

    它是一种类似数组的结构,它的每一个元素只能是0或1,每个元素仅用1bit空间

    二,初始化

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

            bitset<8> b;         // 00000000
        bitset<8> bit(8);    // 00010000
        bitset<8> tp1(string("01010101"));  // 10101010
        bitset<8> tp2(bit);  // 00010000
    
        cout << "  b = " << b << endl;
        cout << "bit = " << bit << endl;
        cout << "tp1 = " << tp1 << endl;
        cout << "tp2 = " << tp2 << endl;        
    View Code

    ① 其中,打印出来的顺序和实际顺序是反的(不太知道为什么)

    ②  bit(8),就是把 bit(2的3次方),让下标为 3 的位置为 1.

    ③ 用字符串的话,实际的数值应该 和字符串 是反过来的 (要么是从右往左读,要么是通过位运算读取字符串)

    三,函数

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

     bit.test(x):          返回下标为 x 的值,可以检查 bit 中在 x 处的二进制位是否为1

    ========== ========= ======== ====== ===== ==== === == =

    登金陵凤凰台  李白 唐

    凤凰台上凤凰游,凤去台空江自流。

    吴宫花草埋幽径,晋代衣冠成古丘。

  • 相关阅读:
    【BZOJ5286】[HNOI2018]转盘(线段树)
    【BZOJ2003】[HNOI2010]矩阵(搜索)
    【BZOJ2000】[HNOI2000]取石头游戏(贪心,博弈论)
    【BZOJ1998】[HNOI2010]物品调度(并查集,模拟)
    【BZOJ2001】[HNOI2010]城市建设(CDQ分治,线段树分治)
    【BZOJ1925】[SDOI2010]地精部落(动态规划)
    【BZOJ1856】[SCOI2010]字符串(组合数学)
    【BZOJ1826】[JSOI2010]缓存交换(贪心)
    【BZOJ1823】[JSOI2010]满汉全席(2-sat)
    【BZOJ1822】[JSOI2010]冷冻波(二分,网络流)
  • 原文地址:https://www.cnblogs.com/asdfknjhu/p/12606329.html
Copyright © 2011-2022 走看看