一、bitset(位段)类模板
bitset创造一个内含任意个数的位或bool值且大小固定的数组(array)。当需要管理各种标识符,并以变量形式表现出来时,可以使用bitset类模板,头文件为< bitset>,两个变量之间可以直接进行位运算。
(1)构造函数
bitset<int Size> bitName;/*构造一个bitset对象,含有Size位,且其中所有位均为0 */ bitset<int Size> bitName(unsigned long val);/* 构造一个bitset对象,含有Size位,并以十进制数val初始化bitset对象中的所有位 */ bitset<int Size> bitName(string val);/* 构造一个bitset对象,含有Size位,并以字符串val初始化bitset对象中的所有位 */
(2)成员函数
bs.any() 是否存在值为1的二进制位 bs.none() 是否不存在值为1的二进制位或者说是否全部位为0 bs.size() 位长,也即是非模板参数值 bs.count() 值为1的个数 bs.test(pos) 测试pos处的二进制位是否为1与0做或运算 bs.set() 全部位置1 bs.set(pos) pos位处的二进制位置1与1做或运算 bs.reset() 全部位置0 bs.reset(pos) pos位处的二进制位置0与0做或运算 bs.flip() 全部位逐位取反 bs.flip(pos) pos处的二进制位取反 bs.to_ulong() 将二进制转换为unsigned long输出 bs.to_string() 将二进制转换为字符串输出 ~bs 按位取反效果等效为bs.flip() os << b 将二进制位输出到os流小值在右,大值在左
二、stack(栈)类模板
stack(栈)类模板声明在std,头文件< stack>中,定义如下:
template < class T,class Container=deque< T> > class stack;
第1个参数为元素类型,第二个参数定义实现stack的实际容器,默认为deque。
栈的成员函数只有5个:
push(const T& x);//添加一个元素 pop();//弹出一个元素 top();//返回下一个元素,但并不移除 size(); //返回元素个数 empty();//判断是否为空
三、queue(队列)类模板
queue(队列)类模板声明在std,头文件< queue>中,定义如下:
template < class T,class Container=deque< T> > class stack;
第1个参数为元素类型,第二个参数定义实现stack的实际容器,默认为deque,理论上,可以使用任何容器来实现队列功能,但有个前提就是容器必须支持front()、back()、push_back()、pop_front()等。
int size();// 获取元素个数 Type front();// 获取指向第一个元素的迭代器 void push(Type val);// 在末尾插入数据 void pop();//删除最后一个元素 bool empty();//判断队列是否为空
四、priority_queue 类模板
priority_queue 类模板即优先队列类模板可实例化queue型容器,其中元素根据优先级被读取。接口和queue几乎相同,在优先级队列中,元素不是按顺序存储在容器中的,而是按优先级顺序存储的,默认是从小到大的准则。使用时需要包含头文件< queue>:
template < class T,class Container = vector< T>,class Compare=less< typename Container::value_type>> class priority_queue;
第1个参数是元素的类型,第二个参数定义了实现该功能所用容器,默认为vector,第三个参数定义的是排序规则。
priority_queue的核心接口有3个:
void push(const T& x);//添加一个元素 void pop();//弹出一个元素 T top();//返回下一个元素,但并不移除 int size();// 获取元素个数 bool empty();//判断队列是否为空