zoukankan      html  css  js  c++  java
  • C++bitset学习笔记(超级简化)

    使用bitset需要引用<bitset>头文件。

    赋值

    #include<bits/stdc++.h>
    using namespace std;
    bitset<8>s;
    int main(){
    string k="01110001";
    bitset<8>s(k);
    cout<<s;
    return 0;
    }

    输出01110001

    关于位怎么对应

    移动

    按位运算(按位 xor & |

    注意只有按位运算仅仅支持两个长度相同bitset类型的按位运算,并且返回值是一个bitset

    成员函数

    reset

    bitset的清空操作为reset。将集合内元素全部置零:

    s.reset();

    set

    set有两种用法,第一种是直接调用set不带参数,会将bitset内所有元素置1,另一种是set后加两个参数,分别是pos和val,意为将bitset中第pos个元素的值置为v。当v为true时可以省略不写。

    s.reset();
    s.set()             //11111111
    s.set(3,false)      //11110111
    s.set(3)            //11111111

    使用set进行单点修改的复杂度为 O(1)O(1) , 将所有元素修改的复杂度为 O(frac{n}{w})O(wn)

    test

    test有一个参数pos,返回一个bitset内第pos位的值。

    s.reset();
    s.set(7);
    int k = s.test(7);      // k is true
    k = s.test(6);          // k is false

    test的时间复杂度为 O(1)O(1)

    any

    bitset有一个成员函数为any,返回一个布尔量。若bitset内部存在一位的值为1,则返回true,否则返回false:

    s.clear();
    bool k = s.any();           //k is false
    s[1] = true;
    k = s.any()                 //k is true

    复杂度同上。按照不同编译器版本的实现方法,.any()的常数甚至有可能小于理论值。

    none

    与any相对,返回一个布尔量,不存在任何一个位置的值为1则返回true,否则返回false。

    s.clear();
    bool k = s.none();          //k is true
    s[1] = true;
    k = s.none()                //k is false

    count

    count返回一个bitset内1的个数,是一个无符号整形:

    s.reset();
    int k = s.count();              // k is 0                   
    s[1] = true;
    k = s.count();                  // k is 1

    需要注意的是目前扶苏已知的资料中,count的复杂度也是 O(frac{N}{w})O(wN) 。

    当然想知道0的个数可以用总长度减去count喽

    flip

    flip函数类似于按位取反,它的两个声明如下:

    bitset& flip();
    bitset& flip (size_t pos);

    当调用s.flip()且括号内无参数时,会将集合内所有元素取反(0变1,1变0)

    当调用s.flip(x)时,会将第x位取反(从0编号)

    s.reset();
    s[1] = true;    //s is "01000000"
    s.flip();       //s is "10111111"
    s.flip(1);      //s is "11111111"
  • 相关阅读:
    使用node.js搭建本地服务器
    使用Vue前端框架实现知乎日报app
    Echarts的使用
    [LeetCode] 642. Design Search Autocomplete System 设计搜索自动补全系统
    [LeetCode] 249. Group Shifted Strings 分组偏移字符串
    [LeetCode] 298. Binary Tree Longest Consecutive Sequence 二叉树最长连续序列
    [LeetCode] 128. Longest Consecutive Sequence 求最长连续序列
    [LeetCode] 227. Basic Calculator II 基本计算器 II
    [LeetCode] 224. Basic Calculator 基本计算器
    [LeetCode] 117. Populating Next Right Pointers in Each Node II 每个节点的右向指针 II
  • 原文地址:https://www.cnblogs.com/xiazai/p/10356656.html
Copyright © 2011-2022 走看看