C++bitset(十九)

每日一个小问题:当你要创建一个特别大的bool数组,内存会很大,你该怎么储存呢?

答:这时就可以使用bitset了,bitset占用的空间很小,每一个值仅占用1bit

图片

在此之前我们先来学习一下bitset吧!

1.bitset的简介

C++ 中bitset的实现在一个<bitset>头文件中,在代码开头引入这个头文件,并且同样加上一句using namespace std。

2.bitset的声明与操作

构造方法

直接构造一个bitset的语句为:bitset <16> vis;。这样我们定义了一个名为 vis的、储存长度为 16的 bitset。初始的时候 vis 的每一项均为 0。

这一步就相当于声明变量,声明了一个bitset,以后就可以用它了。

访问

可以通过 [] 访问元素(类似数组),注意最低位下标为 0,如下所示:

bitset <16> vis;

cout << vis[1] << endl;

修改

可以通过 set() 和 reset() 函数对 bitset 中某个元素进行修改。其中 set() 函数是将某个元素变为 1 或 0,reset() 函数是将某个元素变为 0。例如:

bitset <16> vis;

vis.set(); 没有参数时,是将 bitset 的每一位全部变为 1

vis.set(3); 只有一个参数时,是将对应下标位变为 1。这里处理后:

vis[3] = 1

vis.set(4,1) ;有两个参数时,是将第一个参数对应的下标位修改为第二个参数。这里处理后:vis[4] = 1

vis.reset(); 没有参数时,是将 bitset 的每一位全部变为 0

vis.reset(2);只有一个参数时,是将对应下标位变为 0。这里处理后: vis[2] = 0

思考

大家思考一下,除了 bitset 外,还有哪些数据结构可以实现标记呢?

其实 set 和 map 均可以实现。

  1. set 实现标记:判断 x 是否在集合内,可以使用 count() 函数。

  2. map 实现标记:判断 x 的第二关键字是否为 true。

3.每日小问题解

直接设置一个bitset就ok了

图片

图片

实验结果:

图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值