|
| template<typename T> |
| constexpr T | dl::clamp (const T &x, const T &a, const T &b) |
| | 限制数值到 [a, b]
|
| |
| template<typename T> |
| constexpr T | dl::saturate (const T &x) |
| | 限制数值到 [0, 1]
|
| |
| template<typename T> |
| constexpr T | dl::is_saturate (const T &x) |
| | 是否数值在[0, 1]
|
| |
| template<typename T> |
| constexpr Array< T, 3 > | dl::cross (const Array< T, 3 > &a, const Array< T, 3 > &b) |
| | 向量叉乘
|
| |
| template<typename T> |
| T | dl::cast_dynamic (void *p) |
| | 动态类型强转
|
| |
| template<typename T, size_t N> |
| bool | dl::limit_bigger (Array< T, N > &a, const Array< T, N > &limit) |
| | 限制到大于某个值,如果修改了原值则返回true
|
| |
| template<typename T> |
| const T & | dl::as_const (T &a) |
| |
| template<typename T, typename V> |
| void | dl::erase_head_from_last (T &container, const V &a) |
| | 从容器container中移除 最后 匹配到的a元素 之前(包含a)的所有元素,如果没有匹配到,则什么都不做。
|
| |
| template<PopFrontAble C, typename F> |
| void | dl::operate_front (C &container, F func) |
| | 从容器container不断取出第一个元素,执行操作
|
| |
| template<typename T> |
| T * | dl::pointer (T &&x) |
| | 查找算法
|
| |
| template<typename T> |
| const T & | dl::constant (T &v) |
| | 加上const修饰
|
| |
| template<typename C> |
| auto | dl::find_equal (C &container) |
| | 替换容器元素值
|
| |
| template<typename T, typename V> |
| T | dl::insert_per_num (const T &container, V v, size_t per_num) |
| | 隔n个元素就插入1个分割符,首尾不会出现分割符
|
| |
| template<typename T, typename V> |
| T | dl::r_insert_per_num (const T &container, V v, size_t per_num) |
| | 从后面往前,隔n个元素就插入1个值,首尾不会出现分割符
|
| |
| template<typename T, typename V> |
| void | dl::split (const T &container, V delimiter, std::vector< T > &ret) |
| | 以 元素 分割 容器
|
| |
| template<typename T, typename V> |
| void | dl::split_no_empty (const T &container, V delimiter, std::vector< T > &ret) |
| | 以 元素 分割 容器
|
| |
| template<typename T> |
| void | dl::split_sub (const T &container, const T &delimiter, std::vector< T > &ret) |
| | 以 子串 分割 容器
|
| |
| template<typename T, typename V> |
| void | dl::make_sequence (T &c, const std::initializer_list< std::initializer_list< V > > &vec) |
| | 生成序列
|
| |
| template<typename C, typename F> |
| void | dl::for_couple (const C &container, F func, bool ring=false) |
| | 成对遍历
|
| |
| template<typename C, typename F> |
| void | dl::for_couple_r (const C &container, F func, bool ring=false) |
| | 反向成对遍历
|
| |
| template<IsPointer T, typename FC, typename F> |
| void | dl::for_tree (T root, FC func_child, F func) |
| | 遍历树(使用栈,深度优先)
|
| |
| template<typename T, size_t N> |
| constexpr T & | dl::arr_last (const T(&arr)[N]) |
| | 返回静态数组长度
|
| |
| template<IsSigned T> |
| constexpr T | dl::sign (const T &v) |
| | 返回符号,正数返回1、负数返回-1、0返回0
|
| |
| template<size_t N> |
| consteval uint64_t | dl::str_uid (const char(&str)[N]) |
| | 固定条件的字符串,生成唯一id
|
| |