一、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();//判断队列是否为空