一、tuple类型
1、定义和初始化tuple
类似pair,每个pair都恰好有两个成员,tuple可以有任意数量的成员;
tuple<int, int, int> t; //值初始化
tuple<size_t, size_t, size_t> t1(1,2,3); //初始值初始化
auto t = make_tuple(1,2,3); //类似make_pair函数
get<0>(t); //get标准库函数访问tuple成员,返回t的第一个成员的引用
tuple_element<1, decltype(t)>::type cnt = get<0>(t); //type为成员类型
decltype(t); //t的类型
size_t sz = tuple_size<decltype(t)>::value; //返回tuple中成员的数量
关系和相等运算符:对每对儿成员使用关系和相等运算符都必须是合法的
tuple<int, int> t1;
tuple<string, int> t2;
tuple<int, int, int> t3;
t1 == t2; //错误,不能比较string和int
t1 == t3; //错误,成员数量不同
二、bitset类型
1、初始化bitset
用unsigned值初始化bieset
//bs1比初始值小;初始值的高位被丢弃
//二进制序列为1 1110 1110 1111
bitset<13> bs1(0xbeef);
//bs2比初始值大;高位被置0
//二进制序列为0000 1011 1110 1110 1111
bitset<13> bs2(0xbeef);
//在64位机器中,OULL是64个0比特,因此~0ULL是64个1
//0-63位为1,64-127位为0
bitset<128> bs3(~0ULL);
用string初始化bitset
//bs4中第三位到第0位被设置为1100,剩余位被置为0
bitset<32> bs4("1100");
string s("11111111011100001100");
//从str[5]的4个字符初始化bs5
bitset<32> bs5(s,5,4);
//使用最后4个字符初始化bs6
bitset<32> bs6(s, s.size()-4);
2、bitset操作
b.any() //b中存在置位的二进制位吗
b.all() //b中所有位都职位了吗
b.none() //b中所有位都复位了吗
b.count() //b中置位的数量
b.size() //一个constexpr函数,返回b的位数
b.test(pos) //pos位置的位是置位吗
b.set(pos, v) //pos位,置位v,v的默认值位1
b.set() //b中所有位都置位
b.reset(pos) //pos位,复位
b.reset() //b中所有位都复位
b.filp(pos) //pos位改变状态
b.filp() //b中所有位都改变状态
b[pos] //访问pos位的状态,也可改变该位的状态
b.to_ulong() //返回一个位模式与b相同的unsigned long或unsigned long long值,如果不能放入指定结果中,则抛出overflow_error异常
b.to_ullong()
b.to_string(zero, one) //返回一个string,表示b中的位模式,zero和one的默认值分别为0和1
os<<b //b的位模式打印到流os
三、正则表达式