一、概述
bitset构造出一个内含位(bit)或布尔(bool)值且大小固定的array。不能改变bitset内位的数量。这个参数由template参数决定的。如果需要一个可变长度的位容器,考虑使用vector<bool>。Class bitset定义于头文件<bitset>中,有一个template参数用来指定位的数量:
namespace std {
template <size_t Bits>
class bitset;
}
此处template的参数并不是一个型别,而是一个不带正负号的整数。
二、bitset操作函数
1. 生成、拷贝和销毁
bitset<bits>::bitset()
- default构造函数
- 生成一个bitset,所有值初始化为0
bitset<50> flags; //flags: 000000...000000
bitset<bits>::bitset(unsigned long value)
- 产生一个bitset,以整数值value的二进制位作为初值
- 如果value的值太小,前面不足的位被设为0
bitset<50> flags(7); //flags: 000000...000111
explicit bitset<bits>::bitset (const string& str)
bitset<bits>::bitset (const string& str, string::size_type str_idx)
bitset<bits>::bitset (const string& str, string::size_type str_idx, string::size_type str_num)
- 以上所有形式都用来初始化bitset,以字符串str或其子串加以初始化。
- 该字符串或者子串中只能包含字符'0'和'1'
- str_idx是str中用来初始化的第一个字符
- 如果省略str_num,从str_idx到str结束的所有字符都将用于初始化
- 若字符串中字符数量少于所需,前面多余的位置将被设为初值0
- 若字符串中字符数量多于所需,后面多余的位置将被忽略
- 如果str_idx>str.size(),抛出out_of_range异常
- 如果有字符非'0'非'1',抛出invalid_argument异常
bitset<50> flags(string("1010101")); //flags: 000...0001010101
bitset<50> flags(string("1111000"),2,3); //flags: 000...000