备忘表

优质
小牛编辑
130浏览
2023-12-01

备注

  • 大多数算法同时处理类型和值(参见类型计算)
  • 算法通常返回一个新容器作为它们的返回结果;不会更改原容器(参见算法)
  • 所有的算法都是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<from,to>(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个序列。返回的序列具有最短输入序列的长度。