bitset初始化问题
在C++primer上面说,bitset可以用unsigned long来进行初始化,但是上面的例子只是采用了常数如0xffff,而在实际中,当在vs2010中,我采用unsigned long类型的变量来进行初始化时,发现说出现错误,
error C2668: “std::bitset<_Bits>::bitset”: 对重载函数的调用不明确
测试了下,int是4个字节,unsigned long 4个字节,long也是4个字节,但是int 和long都可以用来进行初始化
下面是c++primer里关于bitse采用unsigned long和string进行初始化的讲解,其中尤为注意的是,在bitset中是数的低位在前高位在后
下面是转载的相关的bitset的内容:
功能:处理二进制位的有序集
#include<bitset>
using std::bitset;
初始化bitset变量的方法:
|
bitset<n> b; |
b有n位,每位都为0 |
|
bitset<n> b(u); |
b是unsigned long型u的一个副本 |
|
bitset<n> b(s); |
b是string对象s中含有的位串的副本 |
|
bitset<n> b(s, pos, n); |
b是s中从位置pos开始的n个位的副本 |
注意:n必须是常量表达式。
例如:
bitset<16> bitvec1(0xffff); // bits 0 ... 15 are set to 1
bitset<32> bitvec2(0xffff); // bits 0...15 are set to 1; 16...31 are 0
从string对象读入位集的的顺序是从右向左的
string strval("1100");
bitset<32> bitvec3(strval);
string对象和bitset对象之间是反向转化的:string对象的最右边字符(即下标最大的那个字符)用来初始化bitset对象的低阶位(即下标为0的位)。当用string对象初始化bitset对象时,记住这一差别很重要。
bitset对象的操作
|
b.any() |
b中是否存在置为1的二进制位? |
|
b.none() |
b中不存在置为1的二进制位吗? |
|
b.count() |
b中置为1的二进制位的个数 |
|
b.size() |
b中二进制位的个数 |
|
b[pos] |
访问b中在pos处的二进制位 |
|
b.test(pos) |
b中在pos处的二进制位是否为1? |
|
b.set() |
把b中所有二进制位都置为1 |
|
b.set(pos) |
把b中在pos处的二进制位置为1 |
|
b.reset() |
把b中所有二进制位都置为0 |
|
b.reset(pos) |
把b中在pos处的二进制位置为0 |
|
b.flip() |
把b中所有二进制位逐位取反 |
|
b.flip(pos) |
把b中在pos处的二进制位取反 |
|
b.to_ulong() |
用b中同样的二进制位返回一个unsigned long值 |
|
os << b |
把b中的位集输出到os流 |
bitset<32> bitvec; //32bits,all zero
bool is_set=bitvec.any(); //false,all bits are zero
bool is_not_set=bitvec.none(); //true,all bits are zero
size_t bits_set=bitvec.count(); //返回一个size_t类型的bits_set值,统计1的个数
size_t类型是一个与机器相关的unsigned类型,大小足够。
可以用下表操作符来读写或测试某个索引位置的二进制位:
for(int index=0;index!=32;index++){
bitvec[index]=0;
} //用下表操作符将所有位都置为零
for(int index=0;index!=32;index++){
bitvec.set(index);
} //用set操作将所有位都置为1
if(bitvec.test(i))
//测试第i位是否为1
if(bitvec[i])
//与上一个函数功能相同
bitvec.set(); //全部置一
bitvec.reset(); //全部置零
unsigned long ulong=bitvec.to_ulong();
cout<<"ulong="<<ulong<<endl; //当bitvec的长度小于unsigned long时候才可以
bitset初始化问题的更多相关文章
- C++ Primer学习笔记2--c++标准库中的 vector、string 和 bitset 类型
一.string #include <string> using std::string 初始化函数: string s1; 默认构造函数 s1 为空串 ...
- Java Bitset
Bitset创建一种特殊的数组来保存非负整数的值 取值为true和false,初始都是false.Bitset初始化是一个long,65位,增加位数的话只能是64的整数倍. 如果用一个Bitset存储 ...
- 关联规则算法Apriori的学习与实现
转自关联规则算法Apriori的学习与实现 首先我们来看,什么是规则?规则形如"如果-那么-(If-Then-)",前者为条件,后者为结果.关联规则挖掘用于寻找给定数据集中项之间的 ...
- [bzoj1770][Usaco2009 Nov]lights 燈——Gauss消元法
题意 给定一个无向图,初始状态所有点均为黑,如果更改一个点,那么它和与它相邻的点全部会被更改.一个点被更改当它的颜色与之前相反. 题解 第一道Gauss消元题.所谓gauss消元,就是使用初等行列式变 ...
- 把《c++ primer》读薄(3-3 标准库bitset类型)
督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. //开头 #include <bitset> using std::bitset; 问题1.标准库bitset类型( ...
- C++ 标准库类型-String,Vector and Bitset
<C++ Primer 4th>读书摘要 最重要的标准库类型是 string 和 vector,它们分别定义了大小可变的字符串和集合.这些标准库类型是语言组成部分中更基本的那些数据类型(如 ...
- 一道题看bitset应用 --ZOJ 3642
题意:给n个文件,包括文件名和文件大小,然后给出k个关键词,查询包含该关键词的文件的大小总和.文件名为一些中括号括起的关键词的合集. 解法:可用bitset记录每一个关键词在哪些文件中出现,然后查询即 ...
- Bitset 用法(STL)
std::bitset是STL的一个模板类,它的参数是整形的数值,使用位的方式和数组区别不大,相当于只能存一个位的数组.下面看一个例子 bitset<20> b1(5); cout< ...
- bitset常用函数用法记录 (转载)
有些程序要处理二进制位的有序集,每个位可能包含的是0(关)或1(开)的值.位是用来保存一组项或条件的yes/no信息(有时也称标志)的简洁方法.标准库提供了bitset类使得处理位集合更容易一些.要使 ...
随机推荐
- LN : leetcode 746 Min Cost Climbing Stairs
lc 746 Min Cost Climbing Stairs 746 Min Cost Climbing Stairs On a staircase, the i-th step has some ...
- RecycleView的万能适配器
转载自http://www.cnblogs.com/liushilin/p/5720926.html 由于RecyclerView的Adapter必须继承自RecyclerView.Adapter,并 ...
- Hive工具类
Hive2.x的工具类,对常用方法进行了封装,其中设置了kerberos认证. package com.ideal.template.openbigdata.util; import java.sql ...
- DROP DATABASE - 删除一个数据库
SYNOPSIS DROP DATABASE name DESCRIPTION 描述 DROP DATABASE 删除一个现存数据库的目录入口并且删除包含数据的目录. 只有数据库所有者能够执行这条命令 ...
- uva1614 Hell on the Markets
贪心部分的理论依据:前i个数可以凑出1-sum[i]的所有整数. 证明:第二类数学归纳,n=1时成立,假设n=k之前所有项都成立,当n=k+1时.sum[k+1]=sum[k]+a[k+1].只需证明 ...
- Win10 启动64位IE浏览器——修改注册表方法
修改注册表[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]下的: "TabProcGrowth"=DWOR ...
- CF1179D Fedor Runs for President [DP,斜率优化]
Codeforces 思路 考虑把连的那两个点中间的链提出来,那么就会变成一条链,链上的每个点挂着一棵子树的形式. 设那些子树的大小为\(S_1,S2,\cdots\),那么新加的简单路径个数就是 \ ...
- 普通用户切换到root用户
普通用户切换到root用户首先按组合键 CTRL+ALT+T 进入终端界面,一般终端界面默认为普通用户权限模式,如何从普通用户进入root用户首先重置root密码输入 sudo passwd root ...
- tmp note
cat file.txt > /dev/null 2>&1 丢弃错误和标准输出 systemctl isolate multi-user.target 切换回多用户命令行模式 sy ...
- html5新增的定时器requestAnimationFrame
在requestAnimationFrame出现之前,我们一般都用setTimeout和setInterval,那么html5为什么新增一个requestAnimationFrame,他的出现是为了解 ...