C++ Bitset类用法

C++ Bitset类用法

  1. 定义和初始化

首先要使用bitset 类我们必须包含相关的头文件

#include <bitset>

然后可以如下声明一个该类型变量:
bitset<8>varm (M)
其中varm为变量名。
8表示该类型在内存中占的位数,是二进制。
M表示变量varm的初始值。
例如:
bitset的构造函数:

bitset<8>bit;//其中8就是bitset类型的bit指定所占空间大小
bitset<n> bit; //bit有n位,每位都为0
bitset<n> bit(s); //bit是string对象s中含有的位串的副本
#include<iostream>
#include<bitset>
#include<cstring>
using namespace std;
int main()
{
    bitset<23>bit (string("11101001"));
    cout<<bit<<endl;
    bit=233;
    cout<<bit<<endl;
    return 0;
}
//结果
//00000000000000011101001
//00000000000000011101001*

bitset是STL的一个模板类,模板参数不是类型,而是整型数值,也同样可以像数组一样使用位。

#include<bitset>
bitset<8>bit;    //声明了以bitset对象bs,bs可以装入8个bit,每一位都初始化为0
bit[0] = 1;    //把0位置初始化1
bit[1] = 0;    //把第1位置初始化0
bs[2] = true;    //把第2位置初始化1(true转换为1)
bs[3] = false;    //把第2位置初始化0(false转换为0)
  1. 常用的函数
对于一个叫做bit的bitset:
bit.size()       返回大小(位数)
bit.count()     返回1的个数
bit.any()       返回是否有1
bit.none()      返回是否没有1
bit.set()       全都变成1
bit.set(p)      将第p + 1位变成1(bitset是从第0位开始的!) 
bit.set(p, x)   将第p + 1位变成x
bit.reset()     全都变成0
bit.reset(p)    将第p + 1位变成0
bit.flip()      全都取反
bit.flip(p)     将第p + 1位取反
bit.to_ulong()  返回它转换为unsigned long的结果,如果超出范围则报错
bit.to_ullong() 返回它转换为unsigned long long的结果,如果超出范围则报错
bit.to_string() 返回它转换为string的结果

3.基本运算
bitset支持所有的位运算:^,&,|

bitset<23>bita(string("11101001"));
bitset<23>bitb(string("11101000"));
cout<<(bita^bitb)<<endl;
//输出00000000000000000000001 
bitset<23>bita(string("11101001"));
bitset<23>bitb(string("11101000"));
cout<<(bita|bitb)<<endl;
//输出00000000000000011101001
bitset<23>bita(string("11101001"));
bitset<23>bitb(string("11101000"));
cout<<(bita&bitb)<<endl;
//输出00000000000000011101000
bitset<23>bit(string("11101001"));
cout<<(bit<<5)<<endl;
//输出00000000001110100100000
bitset<23>bit(string("11101001"));
cout<<(bit>>5)<<endl;
//输出00000000000000000000111

4.例题
poj2443
题意:给n个集合,然后给出n个集合中的数字,n最大1000,数字最大10000。然后m组询问,问a,b这两个数是否同时属于某个集合
//用bitset解决

#include <iostream>
#include<cstdio>
#include<cstdlib>
#include<bitset>
using namespace std;
bitset<1005>bit[10005];//1005代表那些集合, maxn代表那些数的范围
int main()
{
    for(int i = 0; i<10005; i++)
    bit[i].reset();//将bit中每一个初始化为0
    int n; scanf("%d",&n);
    for(int i =0; i<n; i++)
    {
        int s; scanf("%d",&s);
        for(int j = 0; j<s; j++)
        {
            int x; scanf("%d", &x);
            bit[x][i] = 1 ; // 等于bit[x].set(i);
            bit[3][5] = 1 说明第5个集合有3这个数.
        }
    }
    int q; scanf("%d",&q);
    for(int i = 0 ;i < q; i++)
    {
        int x, y; scanf("%d%d",&x,&y);
        if((bit[x]&bit[y]).count()!=0)//(bit[x]&bit[y])也还是一个bitset
        {
          printf("Yes\n");
        }
        else printf("No\n");
    }
    return 0;
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值