algorithm
头文件 <algorithm> 定义了一些应用于区间上的函数。
区间是可以用迭代器或指针访问的对象序列,比如数组和一些 STL 容器 。注意,尽管算法直接作用于其迭代器,但不影响任何容器的结构(不改变其大小或存储方式)。非修改操作(Find):
在区间上应用函数
在区间上查找指定值
在区间上查找满足条件的元素
在区间上查找最后一个与序列匹配的值
在区间上查找第一个与序列匹配的值
在区间上查找前后匹配的元素
计算值在区间上出现次数
计算满足条件的元素在区间上出现次数
返回两个区间上第一次出现的不同之处
测试两个区间的元素是否都相等
在序列上查找满足条件的元素
在序列上查找满足条件的 n 个元素
修改序列的操作:
把元素复制给区间
从后向前把元素复制给区间
交换两个对象的值
交换两个区间的值
交换两个迭代器的值
在区间上应用修改函数
替换区间上的值
替换区间上满足条件的元素
复制替换区间上的值
复制替换区间上满足条件的元素
以值填充区间
以函数填充 n 序列
在区间上应用生成器函数
在 n 序列上应用生成器函数
移除区间上的值
移除区间上满足条件的元素
复制移除区间上的值
复制移除区间上满足条件的元素
压缩区间中的相同元素
复制压缩区间中的相同元素
反转区间中的元素
复制反转区间中的元素
截取并首尾相接区间中的元素
复制截取并首尾相接区间中的元素
打乱区间中的元素
把区间分成两半
以稳定序把区间分成两半
排序:
智能排序区间中的元素
稳定排序区间中的元素
部分排序区间中的元素
复制部分排序区间中的元素
从第 n 位排序区间中的元素
二分查找 (有序区间的操作):
返回插入指定键最小位置的迭代器
返回插入指定键最大位置的迭代器
返回插入指定键最小和最大位置的迭代器
在序列上二分搜索值
合并 (有序区间的操作):
合并有序区间
合并有序区间但不删除相同元素
包含于
取并集
取交集
取单差集
堆:
在堆中压入元素
从堆中弹出元素
创建堆
排序堆
(比较大小)最大/最小:
返回两个参数中小的那个
返回两个参数中大的那个
返回区间最小元素
返回区间最大元素
自然序比较两个序列
生成区间上一个排列
生成区间下一个排列
STL bitset
1、bitset对象的定义和初始化
bitset也是类模板,不过bitset类型对象之间的区别在于长度而不是类型,因此bitset模板的参数是长度类型
初始化方法
说明
bitset b;
b有n位,每位都为0
bitset b(u);
b是unsigned long型u的一个副本
bitset b(s);
b是string对象s中含有的位串的副本,s是01串
bitset b(s, pos, n);
b是s中从位置pos开始的n个位的副本
2、用unsigned long值初始化bitset对象
用unsigned long值初始化bitset对象的时候,将long值转化为二进制模式,然后拷贝到bitset的右方(bitset右边为低阶位,左边为高阶位),string位数多了将被截断,少了bitset将在前面补零。
3、用string对象初始化bitset对象
从string对象初始化bitset对象,需要注意的是,复制拷贝相当于从string位模式平移到了bitset。
例如:
string str(”11001010”);
bitset<32> bitvec(str);
这个时候,bitvec是这样的:0000 0000 0000 0000 0000 0000 1100 1010最右边是bitset的低阶位,即bitvec[0],bitset[1] …
操作调用方式 | 操作说明 |
b.any() | 测试b中是否有存在1的位 |
b.none() | 测试b中是否全0 |
b.count() | 测试b中置1的位个数 |
b.size() | b中所有二进制位个数 |
b[pos] | 访问下标为pos位置的位值 |
b.test(pos) | 测试pos位置的二进制位是否为1 |
b.set() | 将b所有位置1 |
b.set(pos) | 将b中pos位置的位置1 |
b.reset() | 将b所有位置置0 |
b.reset(pos) | 将b中pos位置的位置0 |
b.flip() | 将b中所有位翻转 |
b.flip(pos) | 将b中pos位置上的位翻转 |
b.to_ulong() | 将b转化为unsigned long值 |
os << b | 将b的位集合直接输出到os流 |
注:
Ø b.cout和b.size()返回的是size_t类型,该类型定义在cstddef头文件中(C标准头文件stddef.h的C++版本)
Ø b[pos]可以作为左值,即可以用来改变pos位置的值