C++ bitset的实现

C++中bitset很方便的实现了位操作,有几点需要注意,可以参考源代码:

https://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.2/bitset-source.html

它的模板是

00645   template<size_t _Nb>
00646     class bitset
00647     : private _Base_bitset<_GLIBCXX_BITSET_WORDS(_Nb)>

size_t 是在编译时候就已经得到了,然后将_Nb除上每个大小得到_Nw,_Nw即为模板泛化得到的首地址:

00077   template<size_t _Nw>
00078     struct _Base_bitset
00079     {
00080       typedef unsigned long _WordT;
00081
00082       /// 0 is the least significant word.
00083       _WordT        _M_w[_Nw];

因此,bitset不需要像vector一样存一个首地址。。。

时间: 2024-11-10 15:24:27

C++ bitset的实现的相关文章

bitset bitmap 海量数据处理

bitmap:是一个十分有用的结构.所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素.由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省.      适用范围:可进行数据的快速查找,判重,删除,一般来说数据范围是int的10倍以下 基本原理及要点:使用bit数组来表示某些元素是否存在,比如8位电话号码 扩展:bloom filter可以看做是对bit-map的扩展 问题实例: 1)已知某个文件内包含一些电话号码,每个号码为8位数字,统计不

Gym - 100345H Settling the Universe Up(bitset)

https://vjudge.net/problem/Gym-100345H 题意: 给出一个图,求图中u能到达v的对数,并且u<v.并且会有更新和查询操作. 思路: bitset直接暴力,对于每次更新操作之后,再重新计算一遍即可.bitset是真的强大啊! 1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #include<cstdio> 5 #include<ve

【动态规划】【滚动数组】【bitset】XVII Open Cup named after E.V. Pankratiev Stage 14, Grand Prix of Tatarstan, Sunday, April 2, 2017 Problem J. Terminal

有两辆车,容量都为K,有n(10w)个人被划分成m(2k)组,依次上车,每个人上车花一秒.每一组的人都要上同一辆车,一辆车的等待时间是其停留时间*其载的人数,问最小的两辆车的总等待时间. 是f(i,j)表示前i组,j个人是否可行.w(i)表示第i组的人数. if f(i,j)==1 then f(i+1,j+w(i+1))=1. 这是个bitset可以做的事情,每次左移以后或上f(i-1)的bitset即可.其实可以滚动数组. 然后每更新一次bitset,求一下其最左侧的1的位置,就是对于第一辆

洛谷 P3674 小清新人渣的本愿 [莫队 bitset]

传送门 题意: 给你一个序列a,长度为n,有Q次操作,每次询问一个区间是否可以选出两个数它们的差为x,或者询问一个区间是否可以选出两个数它们的和为x,或者询问一个区间是否可以选出两个数它们的乘积为x ,这三个操作分别为操作1,2,3 题面太强啦!!! 感觉就是莫队,想了一下分块不好搞更坚定了莫队的信念 $a-b=x$,$a=x+b$,放在权值数组上就是b右移x位,$bitset$大法好 加法同理 乘法,总共就$\sqrt{N}$个约数.... #include <iostream> #incl

C++ 之 bitset

在PC端文件播放器中,多画面管理时,将整个画面切割成N个矩形块.将打开显示与否的信息放在bitset容器中,今天就来对bitset做个小结 1.bitset可以表示二进制的有序集,用bitset来处理程序中的需要保存一组标志的操作很简便,下面总结一下bitset的一些函数. 2.定义和初始化bitset: 定义一个bitset时需要声明它包含多少个二进制位,大小必须是一个常量表达式,bitset中的二进制位是未命名的,可以通过位置来访问.编号从右到左依次从0位开始,从低到高. 例:bitset<

BZOJ3687:bitset STL

[bzoj3687][FJ2014集训]简单题 2014年9月14日1,8212 [题目描述]小呆开始研究集合论了,他提出了关于一个数集四个问题:1. 子集的异或和的算术和.2. 子集的异或和的异或和.3. 子集的算术和的算术和.4. 子集的算术和的异或和.目前为止,小呆已经解决了前三个问题,还剩下最后一个问题还没有解决,他决定把这个问题交给你,未来的集训队队员来实现.[输入格式]从 xor.in 中输入数据第一行,一个整数 n.第二行,n 个正整数,表示 a1, a2, …, an[输出格式]

#include &lt;bitset&gt;

1 none();测试是否有越位 2 reset();全部清零 3 set(7, 0);把第7个字符改成0,操作二进制位 4 to_string();转换为字符串 5 to_ulong();转换为无符号整数 bitset可以实现把十进制转换为二进制,以及输出补码 1 #include <iostream> 2 #include <bitset> 3 4 void main() 5 { 6 int num = -5; 7 8 std::bitset<32>myset(nu

Java BitSet使用场景和示例

一.什么是BitSet? 注:以下内容来自JDK API: BitSet类实现了一个按需增长的位向量.位Set的每一个组件都有一个boolean值.用非负的整数将BitSet的位编入索引.可以对每个编入索引的位进行测试.设置或者清除.通过逻辑与.逻辑或和逻辑异或操作,可以使用一个 BitSet修改另一个 BitSet的内容. 默认情况下,set 中所有位的初始值都是false. 每个位 set 都有一个当前大小,也就是该位 set 当前所用空间的位数.注意,这个大小与位 set 的实现有关,所以

Bzoj 1703: [Usaco2007 Mar]Ranking the Cows 奶牛排名 传递闭包,bitset

1703: [Usaco2007 Mar]Ranking the Cows 奶牛排名 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 323  Solved: 238[Submit][Status][Discuss] Description 农夫约翰有N(1≤N≤1000)头奶牛,每一头奶牛都有一个确定的独一无二的正整数产奶率.约翰想要让这些奶牛按产奶率从高到低排序.    约翰已经比较了M(1≤M≤10000)对奶牛的产奶率,但他发现,他还需要再做一

bitset

bitset这个东西,是c++里面封装好了的处理多位运算的东西. 亲测比自己写快10倍以上. 以下是概念: std::bitset是STL的一部分,准确地说,std::bitset是一个模板类,它的模板参数不是类型,而整形的数值(这一特性是ISO C++2003的新特性),有了它我们可以像使用数组一样使用位.下面看一个例子: #include<bitset> std::bitset<8> bs;//它是一个模板,传递的参数告诉编译器bs有8个位. 我们接着看上面的代码,通过上面两行