(一)stack堆栈
a) LIFO后进先出。一般只有三个接口有用:pop(), push(), top()。
b) 可以自己制作一个,一般封装deque,原因是deque释放元素就直接释放了内存,符合堆栈特性。
(二)queue队列
a) FIFO先进先出。核心接口:push(), pop(), front(), back()。
b) 一般封装deque,理由同上。
(三)priority queue优先队列
a) 核心接口:push(), pop(), top()。
b) 一般封装vector,原因是采用heap算法。用deque也行。
(四)bitset
a) 一个内含位(bit)的固定大小的array容器。适用于管理标志(flag)。速度一般并不是非常高效。
b) 可以方便的在数与二进制编码之间转化:
cout <<bitset<numeric_limits<unsigned long >::digits >(267);
cout << bitset<100>(string(“1000101011”)).to_ulong();
关于数值极限,请参考第四章。
c) bitset的初始化方式:
bitset( value );
bitset(const string&, str_idx);
bitset(const string&, str_idx,str_num);
string 里只能是包含0和1的字符串。
str_idx 是字符串的位置
str_num 是转化多少个位
d) 特殊操作
函数名 | 作用 |
count() | 位值为1 的个数 |
any() | 只要有1就为真 |
none() | 都为0就是真 |
test(idx) | 判断位是否为1 |
set() | 全部设为1 |
set(idx) | 设某位为1 |
set(idx,value) | 设某位的值 |
reset | 全为0 |
reset(idx) | 某位设为0 |
flip | 翻转所有位 |
flip(idx) | 翻转某一位 |
^= |= &= | 自己看 |
<<= | 左移动,空白填0 |
>>= | 右移动,空白填0 |
~bitset | 返回翻转值 |
bitset << num | 返回左移动num位的值 |
bitset >> num | 返回右移动num位的值 |
& | ^ bitset | 自己看 |
可以使用标准IO库来输入输出,比如cin >> bitset; cout << bitset;
只能是包含0和1的字符串。