备忘表

备注

  • 大多数算法同时处理类型和值(参见类型计算)
  • 算法通常返回一个新容器作为它们的返回结果;不会更改原容器(参见算法)
  • 所有的算法都是constexpr函数对象
容器 说明
tuple 固定长度的基于索引的泛型异构序列,可将它视为异构对象中的std::vector
optional 表示可选值,即可以为空的值。它有点像std::optional,除了空值也是编译时已知的外
map 无序关联数组映射(唯一)编译期实体到任意对象。好比异构对象的std::unordered_map
set 无序容器,包含必须是编译期实体的唯一键。好比异构对象的std::unordered_set
range 表示编译期的数值范围,好比更好的std::integer_sequence
pair 持有两种异构对象的容器。好比std::pair,但压缩空类型的存储
string 编译期字符串
type 表示一个C++类型的容器。是类型与值相统一的根本所在。比MPL式的计算更有趣,参见类型计算
integral_constant 表示编译期数值。非常类似于std::integral_constant,不同之处在于hana::integral_constant还定义了一些操作和语法糖
lazy 封装一个惰性值或计算
basic_tuple 简装版hana::tuple。不符合标准,但更有编译时效率
函数 说明
adjust(sequence,value,f) 将函数应用到序列的每个元素上,将值与元素比较,返回调整后的序列
adjust_if(sequence,predicate,f) 将函数应用到序列的每个元素上,调整满足谓词的每个元素,返回调整后的序号
{all,any,none}(sequence) 返回是否 所有/任意/无 序列的元素都是真值
{all,any,none}(sequence) 返回是否 所有/任意/无 序列的元素满足谓词
append(sequence,value) 附加元素到序列
at(sequence,index) 返回序列第n个元素,index必须是一个IntegralConstant
back(sequence) 返回非空序列的最后一个元素
concat(sequence1,sequence2) 合并两个序列
contains(sequence,value) 序列中是否包含给定的值
count(sequence,value) 序列中给定值的数量
count_if(sequence,predicate) 序列中给定符合谓词条件的元素的数量
drop_front(sequence[,n]) 从序列中删除前n个元素,若length(sequence)<=n,则删除整个序列。n必须是IntegralConstant,未提供n时,默认为1
drop_front_exactly(sequence[,n]) 从序列中删除前n个元素,n必须是IntegralConstant而且序列中至少要有n个元素,未提供n时,默认为1
drop_back(sequence[,n]) 从序列结尾删除n个元素,若length(sequence)<=n,则删除整个序列。n必须是IntegralConstant,未提供n时,默认为1
drop_while(sequence,predicate) 从序列删除满足谓词的元素。谓词必须返回一个IntegralConstant
fill(sequence,value) value重置序列中的所有元素
filter(sequence,predicate) 移除序列中所有不满足谓词的元素,谓词必须返回一个IntegralConstant
find(sequence,value) 查找序列中第一个与value相等的元素,并返回justnothing,参见hana::optional
find_if(sequence,predicate) 查找序列中第一个与满足谓词的元素,并返回justnothing,参见hana::optional
flatten(sequence) 连接序列,类似于std::tuple_cat
fold_left(sequence[,state],f) 从左侧累积序列的元素,可选地使用提供的初始状态
fold_right(sequence[,state],f) 从右侧累积序列的元素,可选地使用提供的初始状态
fold(sequence[,state],f) 相当于fold_left,与Boost.MPLBoost.Fusion保持一致
for_each(sequence,f) 在序列的每个元素上调用f函数。返回void
front(sequence) 返回非空序列的第一个元素
group(sequence[,predicate]) 将所有满足(或全部不满足)谓词的序列的相邻元素组。 谓词默认为相等,在这种情况下,元素必须是Comparable(可比性)的
insert(sequence,index,element) 在指定索引处插入元素,index必须是IntegralConstant
insert_range(sequence,index,elements) 在指定索引处插入多个元素,index必须是IntegralConstant
is_empty(sequence) 序列是否为空,返回值作为IntegralConstant
length(sequence) 序列的长度,返回值作为IntegralConstant
lexicographical_compare(
sequence1,sequence2[,predicate])
执行两个序列的词典比较,可选地使用自定义谓词,默认情况下使用hana::less
maximum(sequence[,predicate]) 返回序列的最大元素,可选地根据谓词。 如果没有提供谓词,那么元素必须是Orderable(可排序)的
minimum(sequence[,predicate]) 返回序列的最小元素,可选地根据谓词。 如果没有提供谓词,那么元素必须是Orderable(可排序)的
partition(sequence,predicate) 将序列分成满足和不满足谓词的元素对
prepend(sequence,value) 将元素预置到序列
remove(sequence,value) 移除所有与value相等的元素
remove_at(sequence,index) 移除给定索引处的元素,index必须是IntegralConstant
remove_if(sequence,predicate) 移除所有满足谓词的元素,谓词必须返回IntegralConstant
remove_range(sequence,from,to) 移除半开区间[from,to)的元素,这些索引必须都是IntegralConstant
replace(sequence,oldval,newval) 将序列中所有元素与oldval相等的值替换为newval
replace_if(sequence,predicate,newval) newval替换序列中满足某些谓词的元素。
reverse(sequence) 逆序排列
reverse_fold(sequence[,state],f) 相当于fold_right。为与Boost.MPLBoost.Fusion保持一致。
size(sequence) 相当于length,为与C++标准库保持一致。
slice(sequence,indices) 返回包含原始序列的给定索引处的元素的新序列。
slice_c(sequence) 返回包含原始序列的半开区间[from,to)中包含的索引处的元素的新序列。
sort(sequence[,predicate]) 可选地根据谓词对序列的元素进行(稳定)排序。 如果没有提供谓词,那么元素必须是可排序的。
take_back(sequence,number) 取序列的最后n个元素,如果length(sequence)<= n,则取整个序列。 n必须是IntegralConstant
take_front(sequence,number) 取序列的前n个元素,如果length(sequence)<= n,则取整个序列。 n必须是IntegralConstant
take_while(sequence,predicate) 当一些谓词满足时,获取序列的元素,并返回。
transform(sequence,f) 对序列的每个元素应用函数并返回结果。
unique(sequence[,predicate]) 从序列中删除所有连续的重复项.谓词默认为相等,在这种情况下,元素必须是Comparable(可比较的).
unpack(sequence,f) 用序列的内容调用f,等价于f(x1,...,xN)
zip(s1,…,sN) N个序列压缩成元组序列。所有序列必须具有相同的长度。
zip_shortest(s1,…,sN) N个序列压缩成元组序列。 返回的序列具有最短输入序列的长度。
zip_with(f,s1,…,sN) 用N元函数压缩N个序列。所有序列必须具有相同的长度。
zip_shortest_with(f,s1,…,sN) N元函数压缩N个序列。返回的序列具有最短输入序列的长度。