HDK Fileheader Library 2.0.2

HDK Fileheader Download Page

balanced_tree.h

hdk::balanced_tree::splay

可重 splay 平衡树


接口成员

tree *operator[](int)

返回特定节点信息的引用

传入值为节点编号

int getroot(void)

返回根节点编号

void clear(void)

清空平衡树

void insert(int)

插入元素值

int findnum(int)

查找给定排名的元素值

int findrank(int)

查找给定元素的排名

该行为在传入不存在的元素时的行为类似 lower_bound

void remove(int)

删除一个元素值

int findpre(int)

查找给定元素的前驱

int findnext(int)

查找给定元素的后继


拓展成员

struct tree

节点

成员有:w(节点权值),cnt(节点重复数量),size(节点子树大小),fa(节点父亲),son[0](节点左儿子),son[1](节点右儿子)

bool judgeson(int)

判断给定节点是其父亲的左儿子还是右儿子

会对无父亲节点返回 \(0\)

void update(int)

更新节点信息

void rotate(int)

旋转节点

void sply(int)

将特定节点旋转到根节点

int findpre(void)

查找根节点的前驱节点

int findnext(void)

查找根节点的后继节点

tree* get(int)

形如 operator[]

hdk::balanced_tree::treap

可重 treap 平衡树


接口成员

int getroot(void)

返回根结点编号

int size(void)

返回平衡树大小

void insert(int)

插入元素值

void remove(int)

删除元素值

int findpre(int)

查找给定元素的前驱

int findnext(int)

查找给定元素的后继

int findrank(int)

查找给定元素的排名

int findnum(int)

查找给定排名处的元素

拓展成员

struct tree

节点信息

包含 w(节点权值),data(节点堆权值),size(节点子树大小),cnt(节点重复数量),son[0](节点左儿子),son[1](节点右儿子)

tree* operator[](int)

返回特定的节点信息

void update(int)

更新节点信息

int newnode(int)

对给定权值创建一个新节点,返回新结点编号

tree* get(int)

形如 operator []

void rotate(int &id,int isright)

对传入节点旋转

isright=0 时进行左旋,否则右旋

void insert(int &id,int x)

插入节点(传入根结点编号)

void remove(int &id,int x)

删除节点(传入根结点编号)

int getrank(int id,int x)

查找元素值的排名(传入根结点编号)

int getval(int id,int rank)

查找给定排名处的元素(传入根结点编号)

hdk::balanced_tree::fhq_treap

可重 fhq_treap 平衡树


接口成员

int getroot(void)

返回根结点编号

int size(void)

返回子树大小

void insert(int)

插入元素

remove(int)

删除元素

int findrank(int)

寻找给定元素的排名

int findnum(int)

查找给定排名的元素

int findnext(int)

查找给定元素的后继

int findrank(int)

查找给定元素的排名

拓展成员

struct tree

节点信息

包含 w(节点权值),data(节点堆权值),size(节点子树大小),cnt(节点重复个数),son[0](节点左儿子),son[1](节点右儿子)

tree* operator [](int)

返回节点信息

tree* get(int)

形如 operator[]

void update(int)

更新节点信息

int newnode(int)

对给定权值创建一个新节点,返回新结点编号

int merge(int x,int y)

合并 x,y 对应子树,返回新的根节点编号

void split(int now,int k,int &x,int &y)

对 now 的子树按 k 分裂,x,y 修改为分裂后的子树根节点

int find(int now,int rank)

查找给定排名的数字

bitset.h

hdk::bitset::bitset<int siz>

机制:状压 unsigned long long,位操作使用分块处理

定义:siz: bitset 大小(位大小)

成员运算符

[](int) (右值,修改请使用 set() 方法)
~() 
+(bitset)
+(unsigned long long) 
+=(bitset) 
+=(unsigned long long)
> == < >= <= != (bitset\unsigned long long)
=(bitset\unsigned long long\string)
<< >>
max()
min()

成员函数

int size()

返回 bitset 大小

int array_size()

返回 bitset 占用的 unsigned_longlong 变量个数

void clear()

unsigned long long &at(int pos)

返回 pos 位置的存放数组(对应下标 \([64pos,64pos+63]\)

void upset_down(int pos)

将 pos 位置的数字翻转

void upset_down(int l,int r)

将区间数字翻转

void set(unsigned long long x)

或 operator =(unsigned long long x)

设置 bitset 的值为 x

operator =(string x)

设置 bitset 的值为 x

void set(int pos,bool value)

设置 pos 处的值为 value

void set(int l,int r,bool value)

设置 \([l,r]\) 内的值为 value

当 iscomplete_print=true 时删除前导零;

print(char devide=0,char end='\n',bool iscomplete_print=false)

用 devide 做输出分隔符,end 做结束符输出

flip()

整体翻转

all()

全为 1 时返回 true

any()

有至少一个 1 时返回 true

none()

没有 1 时返回 true

count()

返回 1 的个数

string to_string()

转为字符串返回

to_string(bool complete_print=false)

当 iscomplete_print=true 时删除前导零

函数复杂度

此 bitset 为 64 位/8byte,是 stl 空间使用的四分之一

此 bitset 采用分块思想实现,效率中等.

[] \(O(1)\)
~() \(T(\frac{size}{64})+\Theta(0,127)\)
+(bitset) \(O(size)\)
+(unsigned long long) \(O(size)\)
+= > == < >= <= != \(\Theta(1,size)\)
= \(O(size)\)
<< >> \(O(size)\)
max() min() \(\Theta(1,size)\)
size() \(O(1)\)
array_size() \(O(1)\)
clear() \(T(\frac{size}{64})\)
&at() \(O(1)\)
upset_down(int) \(O(1)\)
upsetdown(int,int) \(T(\frac{r-l+1}{64})+\Theta(0,127)\)
set(unsigned long long) \(\Theta(0,64)\)
set(int,bool) \(O(1)\)
set(int,int,bool) \(T(\frac{r-l+1}{64})+\Theta(0,127)\)
print() \(O(size)\)
flip() \(T(\frac{size}{64})+\Theta(0,127)\)
any() \(O(size)\)
all() \(O(size)\)
none() \(O(size)\)
count() \(O(size)\)
to_string() \(O(size)\)

delist.h

hdk::delist<typename T>

双向链表

成员函数

set_next(int id,int nxt)

设置节点后继

set_next(int id,int pre)

设置节点前驱

node &operator[](int)

push_back(T)

在最后方插入值

该函数的同类函数 insert(T val)

push_front(T)

在最前方插入值

bool empty()

T pop_back()

删除最后方元素值并返回

该函数的同类函数 remove(void)

T pop_front()

删除最前方元素值并返回

size()

begin_id()

返回初始节点编号

end_id()

返回结尾节点编号

next(int &i)

使 i 成为其后继

pre(int &i)

使 i 成为其前驱

next_of(int id)

返回 id 的后继

pre_of(int id)

返回 id 的前驱

findid(int p)

该函数的同类函数 findid,findid_fromhead(以前方为首位),findid_fromback(以后方为首位)

查找 p 位置的元素值

默认值:findid=findid_fromhead

insert_id(int p,T val)

该函数的同类函数 insert_id,insert_id_ahead(在前方插入),insert_id_behind(在后方插入)

在节点编号为 p 的位置插入元素

默认值 insert_id=insert_id_behind

insert(int p,T val)

该函数的同类函数 insert,insert_ahead(以前方为首位,在前方插入),insert_fromback_ahead(以后方为首位,在前方插入),insert_behind(以前方为首位,在后方插入),insert_fromback_behind(以后方为首位,在后方插入)

在链表第 p 个位置前/后插入元素

默认值

insert=insert_hehind

T remove_id(int p)

移除节点编号为 p 的位置的元素,并返回其值

T remove(int p)

该函数的同类函数 remove,remove_fromhead(以前方为首位),remove_fromback(以后方为首位)

移除链表第 p 个位置的元素

find(T value,int appear_time)

该函数的同类函数 find,find_fromhead(以前方为首位),find_fromback(以后方为首位)

寻找给定值第 appear_time 次出现的节点编号

single(T)

判断某一元素是否只出现了一次

clear()

清空链表,但不清除使用空间

shrink_to_fit()

清除未使用的使用空间

vector_size()

使用空间大小

T val(int p)

该函数的同类函数 val,val_fromhead(以前方为首位),val_fromback(以后方为首位)

返回第 p 个位置的值

count(T)

返回给定元素值的出现次数

exist_id(int id)

给定 id 的节点是否在链表中

exist_val(T val)

给定的值是否在链表中

frac.h

hdk::frac

分数类

行为:该类表达了一个分数,它内部的分数总是最简的,并且不会让分母为零

成员运算符

frac(int,int)
operator = (pair<int,int>)
operator = frac
operator +
operator *
operator /
operator -()
operator -
operator < > ==

成员函数

frac fixed()

约分当前分数并返回

执行完该函数后,分母总是一个正数

frac upside()

返回当前分数的倒数

void print()

输出当前分数

graph.h

hdk::forward_star

链式前向星

定义:typename<T,int node_size,int edge_size>

此处的 typename T 应表示边额外存储的信息

如,建立一个存储边权的链式前向星,你需要传入 typename=int 来存储边权

该类有对 typename=void 的特化

成员函数

int add(int _from,int _to,int _value)

加单向边,返回当前边的总数

add_unordered(int x,int y,T value)

加双向边,返回当前边的总数

operator [](int)

返回给定边的信息

int& get_head(int start)

返回从 start 开始的链式前向星起始节点

int& get_to(int id)

返回边的目标节点

int& get_next(int i)

返回下一条边

hdk::graph

这是 vector 的存图方法,主要在 hdk::graph_algorithm 中使用

定义:graph<typename T,int node_size>

成员函数

add(int from,T info)

加边

vector& operator [](int)

返回 vector 信息

namespace hdk::graph_algorithm

hdk::graph_algorithm::dij()

定义 template<typename X,typename T,int node_size> vector<T> dij(hdk::graph_algorithm::graph<hdk::graph_algorithm::weighted_edge<T>,node_size> &G,int start,T inf)

你不需要填入参数列表中的内容,只需要填入函数需要的参数:

hdk::graph_algorithm::graph<hdk::graph_algorithm::weighted_edge<T>,node_size> &G 一个特定类型的图,其中 hdk::graph_algorithm::weighted_edge 是具有方向与边权的图类型

int start 起始节点编号

T inf 你需要自己给定无穷大,用于初始化

函数返回一个 vector<T>,其中第 i 位表示 start 到 i 的最短路

函数需要你的节点类型具有 operator <(const,const)

比较推荐的参数方法是 dij(hdk::graph_algorithm::graph<hdk::graph_algorithm::weighted_edge<hdk::graph_algorithm::dij_node<int>>,node_size> &G,int start,T inf)

hdk_string.h

hdk::hdk_string::hdk_string<int string_siz>

字符串函数

该类包含了从 std::string 的转化

该类的起点是动态的,可以通过修改起点来修改字符串

成员运算符

operator =
operator + +=
operator *(int) 重复拼接
operator *=
operator < <= > >= ==
operator << >> stream

成员函数

int length()

void print(char ending=0)

其中 ending 为结束符,ending=0 时不输出结束符

void check_start()

检查字符串是否合法,无实际用途

void input(int start_pos)

从 start_pos 位读入

void push_back(char)

向末尾插入元素

void getline()

读入一行

char* begin()

char* end()

hdk_string substr(int substart,int sublength)

从 substart 开始截取 sublength 长度的子串

在越界时会截断

unsigned long long hash(int l,int r,int num=233,unsigned long long mod=0)

对 [l,r] 执行哈希,后方两个参数用于调控哈希行为,mod=0 为不取模

unsigned long long hashall(int num=233,unsigned long long mod=0)

对整个字符串执行哈希,后方两个参数用于调控哈希行为,mod=0 为不取模

bool empty()

void pop_back()

删除末尾元素

clear()

hdk_string reverse(hdk_string)

反转字符串

void reverse()

反转自身

bool check_mir()

判断当前是否为回文数

size()

start_pos()

返回起始下标

insert(int pos,hdk_string/std::string)

插入字符串

void erase(int l,int r)

void erase(int pos)

bool find(hdk_string/std::string)

在当前字符串中查找给定字符串

void lowercase()/ lowercase(int l,int r)

将给定区间的大写字母转化为小写字母

void uppercase()/ uppercase(int l,int r)

将给定区间的小写字母转化为大写字母

map_replace(std::map<char,char>mp)/map_replace(std::map<char,char>mp,int l,int r)

根据 map 对字符串执行整体替换

io.h

namespace fastio

基础快读快写

rule(bool)

打开/关闭同步流

read() / read(int) / read(long long) / read(char)

快读

write(int) / write(long long) / write(char)

快写

space() endl()

namespace read_base

需要提前 define using_readbase 以调用

char _read::getchar()

读入一个字符

可以使用 __getchar 快捷调用

void _write::putchar()

输出一个字符

可以使用 __putchar 快捷调用

namespace reader

若 define using_ext_fastio 则不可使用

自由快读

read 函数已经过参数包重载,可以传入任意个参数

read(...)

快读

namespace writer

若 define using_ext_fastio 则不可使用

write 函数已经过参数包重载,可以传入任意个参数

write(...)

快写

namespace ext_fastio

需要提前 define using_ext_fastio 来使用

方砖快读快写,已强制重载 cin cout,可直接使用

iterator.h

hdk::iterator<typename T>

迭代器,typename T 为指向的元素类型

简易迭代器,支持以下官方迭代器支持的函数

  • / += / - / -= / *() / == / ++ / --

distance()

已重载隐式转换

math.h

需要取模操作的函数,都具有两种参数类型:一种是模数作为参数 f(int,int mod),一种是作为模板参数 f<mod>(int)

hdk::math::fact()

阶乘

hdk::math::power()

快速幂

hdk::math::A(int n,int m)

返回 \(A_{n}^{m}\) 的值

hdk::math::C(int n,int m)

返回 \(C_{n}^{m}\) 的值

hdk::math::lucas(int n,int m)

使用 lucas 定理实现组合数求解

hdk::math::exgcd(int a,int b,int &x,int &y)

扩展欧几里得定理

hdk::math::phi(int n)

单个欧拉函数求解

hdk::math::isprime(int x)

质数测试

hdk::math::inv()

求模意义下的乘法逆元

hdk::math::log(int base,int x)

二分求解 log

matrix.h

hdk::matrix

矩阵

定义:matrix<typename T,int maxlen>

成员运算符

operator + - += -=
operator * *=
operator ^(int) 矩阵乘方
operator |(int) 矩阵快速幂

成员函数

void clear()

void setmod(int)

设置自动取模与模数

mod=0 取消自动取模

resize(int n,int m)

fillmain(int)

填充主对角线

fillsec(int)

填充副对角线

fill(int) / fill(int x,int startn,int endn,int startm,int endm)

填充

opposite()

对整个矩阵取反

packed_clear(int n,int m,int filln,int mod)

resize+fill+setmod

void packed_clear(vector<vector>,int mod=0)

用嵌套 vector 进行组合初始化

void input()

输入尺寸与矩阵

void input(int nsize,int msize)

输入指定尺寸的矩阵

void inputn(int nsize)

输入列尺寸,并输入指定行尺寸的矩阵

void inputm(int msize)

输入行尺寸,并输入指定列尺寸的矩阵

void print()

输出矩阵

modint.h

hdk::modint::modint

自动取模的数

定义:template<long long mod=INT_MAX,typename T0=long long>

已重载大部分基本数据结构具有的功能,可以直接替换

额外成员函数

quick_multi(modint)

快速乘

power(modint)

快速幂

inf()

返回模意义下最大值对应的 modint

operator ,

这是干啥的

ordered_vector.h

hdk::ordered_vector

原理:类似 __gnu::pb_ds::ov_tree,原理是通过 lower_bound 和 insert,在 std::vector 上实现有序,复杂度较大

成员函数

clear()

lower_bound(T x)/ upper_bound(T x)

insert(T x)

插入元素

remove(T x)

移除元素

remove_all(T x)

移除所有等于 x 的元素

it()

将自己作为 vector 返回

remove_larger/remove_smaller(int x,bool include_this=false)

将比 x 大/小的元素全部移除

include_this=true 则包括等于 x 的数

operator [](int)

print(char devide=' ',char ending='\n')

输出,devide 是分隔符,ending 是结束符

findpre(T x)

查找 x 的前驱

不存在返回 -1

findnext

查找 x 的后继

不存在返回 -1

T nearestabs(T x)

查找与 x 最接近的元素值

如果等于 x 的数有多个,该函数返回 0

T remove_nearestabs(T x)

查找,移除并返回与 x 最接近的元素值

如果等于 x 的数有多个,该函数随机移除一个并返回 0

int locate_nearestabs(T x)

查找与 x 最接近的元素值,返回其下标

count(T x)

返回元素个数

bool find(T x)

查找元素是否存在

bool empty()

int size()

T find_maxnum(int rank)

返回第 rank 大的数

不存在返回 -1

T find_minnum(int rank)

返回第 rank 小的数

不存在返回 -1

operator +(ordered_vector)

用归并方式合并两个 ordered_vector

password.h

namespace hdk::topass

string hdk::topass::lock(int public_key,int private_key,std::string word)

使用 topass 方法加密字符串

string hdk::topass::unlock(int public_key,int private_key,std::string password)

使用 topass 方法解密字符串

namespace hdk::base_32

class Base32Utils

定义了 base32 方法

string hdk::base_32::lock(std::string x)

使用 base32 方法加密字符串

string hdk::base_32::unlock(std::string x)

使用 base32 方法解密字符串

namespace hdk::base_64

string hdk::base_64::lock(std::string x)

使用 base64 方法加密字符串

string hdk::base_64::unlock(std::string x)

使用 base64 方法解密字符串

rand.h

  • 需要 defination.h

hdk::Rand::__Rand

随机方法:采用 mt19937_64 生成随机数

随机数质量:方差 9.4 / 100-10 test(std::rand 方差 11.0 / 100-10 test)

注意:device_srand() 在 GCC9.2 及以上版本中才能使用

hdk::Rand::randt::SystemRand(l,r)

调用一次 std::rand() 生成 \([l,r]\) 间的随机数

hdk::Rand::randt::Rand()

生成随机非负整数

hdk::Rand::randt::RandSignedInt()

生成随机整数

hdk::Rand::randt::RandInt(l,r)

生成 \([l,r]\) 间的随机数

hdk::Rand::randt::RandLong()

生成随机非负 \(64\) 位整数

hdk::Rand::randt::RandSignedLong()

生成随机 \(64\) 位整数

hdk::Rand::randt::RandLong(l,r)

生成 \([l,r]\) 间的随机 \(64\) 位整数

hdk::Rand::randt::RandReal(fixed)

生成 \([0,1]\) 之间,\(fixed\) 位的随机实数

hdk::Rand::randt::devide_srand()

使用内存池(random_device)随机数作为种子初始化

hdk::Rand::randt::time_srand()

使用当前时间作为种子初始化

hdk::Rand::randt::seed_srand(seed)

固定种子初始化

hdk::Rand::randt::access(double access_p)

该函数有 access_p 的概率返回 true

hdk::Rand::randt::randfrom(vector)

从 vector 中随机选择一个返回

hdk::Rand::randt::randfrom(T A[],int l,int r)

从 [l,r] 下标范围内随机选择一个返回

hdk::Rand::randt::randfrom(__randset)

从给定 __randset 中选择一个返回

详见 defination.h

hdk::Rand::randt::randfrom(__randset_boolen)

从给定 __randset 中选择一个返回

详见 defination.h

hdk::Rand::RandTest

随机数测试

hdk::Rand::Test.Balanced_Test(int r,int times,bool display=false)

hdk::Rand::Test.System_Test(int r,int times,bool display=false)

平衡性测试:在 [1,r] 中选取 times 次数据,计算数据产生方差

tool.h

hdk::tool::floor_sqrt(T)

开根后向下取整,支持 __int128

hdk::tool::print(T)

输出数字,支持 __int128

string hdk::tool::to_string(T)

将数字转为字符串形式

long long hdk::tool::to_number(string)

将字符串转成数字形式

hdk::tool::string to_bit(T)

将数字转成二进制形式,并以字符串返回

string hdk::tool::fixed_size(std::string x,int size,char fillchar='0')

将字符串按高位补齐到 size 大小,不足的位填充 fillchar

bool hdk::tool::copyfile(const char* A,const char* B)

复制文件 A 到 B

失败时返回 1

bool hdk::tool::print(const char*)

输出文件到 stdout

失败时返回 1

bool hdk::tool::fc(const char *file_A,const char *file_B,bool display=false,bool debug_mode=false)

比较文本,不相同则返回 1

display 显示比较结果

debug_mode 显示详细比较信息

hdk::tool::class _time

时间类

time_s / time_ms

将时间转换到时刻

1 time_s = 1 clocks_per_sec

1000 time_ms = 1 time_s

_time::sleep(clocks)

使程序休眠

_time::record_time()

第一次调用记录当前时间,第二次调用返回距离上次调用的时刻差,并重置

_time::record_time(bool is_start)

is_start=true 记录当前时间

is_start=false 返回与记录时间的时间差

hdk::tool::file_name(const string file)

去除文件后缀名并返回

hdk::tool::system(const string)

重定向到 system(const char*)

angle.h

class hdk::arc_angle

弧度制角类

hdk::arc_angle::print(int fixed)

以特定精度输出角

hdk::arc_angle::print(string set)

以 set 做格式控制符输出角

hdk::arc_angle::it()

以弧度制角返回自身

hdk::arc_angle::(long double)

在表达式内引用 arc_angle 时返回对应角的角度制数值

class hdk::deg_angle

角度值角类

hdk::deg_angle::print(int fixed)

以特定精度输出角

hdk::deg_angle::print(string set)

以 set 做格式控制符输出角

hdk::deg_angle::it()

以角度值角返回自身

hdk::deg_angle(long double)

在表达式内引用 arc_angle 时返回对应角的角度制数值

deg_angle hdk::to_deg_angle(arc_angle)/arc_angle hdk::to_arc_angle(deg_angle)

角度值/弧度制互相转化

array.h

  • 需要 iteratior.h io.h

class __array

动态内存数组

定义:__array

可以使用 const std::vector 进行初始化

属性:不需要手动定义内存或扩容,__array 会在内存不足或越界访问时自动按 vector 规则扩容

已重载 =(const std::vector<T>)

__array(__array_iter)

在表达式中引用 __array 时返回指向数组开头的 __array_iter 类型指针

__array::resize(int)

修改数组大小

int __array::size()

返回数组大小

T&__array::operator

返回对应下标的数字

非法时会自动扩容

无法处理负下标

void __array::push_back(const &T)

向数组末端插入一个元素

std::vector __array::operator()()

以 vector 形式返回底层数组

void __array::read_array(int size,int start=1)

读入一个数组,并存入 __array 中

两个参数分别为大小和起始下标

__array_iter __array::begin()/__array::end()

返回指向数组开头/结尾的元素

__array_iter __array::operator+(int x)/operator-(int x)

对于 operator+,返回指向数组开头第 x 个元素的指针

对于 operator-,返回指向数组末尾向前数第 x 个元素的指针

class __array_iter

与 __array 相关的指针

可用 vector::iterator 重载

已重载 =(vector<T>::iterator) +(int) +=(int) -(int) -=(int) ++ -- ==(__array_iter<T>) !=__array_iter<T> 运算符

__array_iter(vector::iterator)

在表达式中引用 __array_iter 时,该引用返回 vector::iterator

__array_iter::operator*(void)

返回指针指向的内容

hdk::iterator<vector::iterator> __array_iter::iterator()

返回一个等价的 hdk::iterator 指针

int operator -(__array_iterA)

返回两个指针的距离

times.h

times.h

defination.h

class hdk::__reflection_upper_case/hdk::__reflection_lower_case

使用 hdk::__uppercase()/hdk::__lowercase() 来调用

可以在 hdk_string::map_replace() 中使用

class hdk::__randset

用于 hdk::Rand::randt::randfrom()

可用 std::vector 初始化

hdk::__randset::operator()()

返回自身

hdk::__randset::operator+()

合并 randset

randset 特化内容:

__randset_uppercase_alpha/__randset_lowercase_alpha

大小写字符的 randset,使用 operator()() 返回对应的 randset

可以使用 hdk::randset_uppercase_alpha()/hdk::randset_lowercase_alpha() 直接调用

可以用 uppercase_alpha/lowercase_alpha 快捷调用

__randset_number_character

数字字符的 randset,使用 operator()() 返回对应的 randset

可以使用 hdk::randset_number_character 直接调用

可以用 number_character 快捷调用

__randset_number

数字 randset,使用 operator()() 返回对应的 randset

需要初始化,可以用两个数 \(l,r\) 初始化,范围为 \([l,r]\) 内全部整数

可以用 range(l,r) 直接调用对应 randset

__randset_boolen/randpair

选择 randset,即容量只有 \(2\) 的 randset,使用 operator()() 返回对应的 randset

需要初始化,可以用 std::pair<T,T> 或两个 T 类型变量初始化

__Return_True()/__Return_False()

返回对应元素

predefined

可以用 setof 快捷调用 __randset

此外,对不同类型的 __randset,均有快捷调用方式

已定义的有:intof charof boolof strof floatof doubleof longod llof ldbof uintof ullof

class __const_reflect_table<int reflect_type,int reflect_size>

只读映射表,可以将数字类型的元素映射到给定内容

可以用 const_reflect_t 快捷调用

需要初始化,可以用 std::vector<reflect_type> 或 reflect_type[] 初始化

可以用 operator / operator()(int) 访问对应元素

__randset<reflect_type> to_randset()

转为 __randset

预定义内容

__const_reflect_table_yes_no({"No","Yes"})/__const_reflect_table_yes_no_uppercase({"NO","YES"})/__const_reflect_table_yes_no_lowercase({"no","yes"})

分别可以通过 YesNo/YESNO/yesno 快捷调用

可以通过提前 define ban_yesno 来禁用

class __reflect_table<reflect_type,int reflect_size>

可变映射表

可以用 reflect_t 快捷调用

可以初始化,可以用 std::vector<reflect_type> 或 reflect_type[] 初始化

可以用 operator / operator()(int) 访问对应元素

__randset<reflect_type> to_randset()

转为 __randset

debug.h

调试用头文件

该头文件的行为会根据是否 define ONLINE_JUDGE 而改变

predefined action

debug1(x) cout<<#x<<devide_type<<x<<debug1_type

debug2(x) cout<<#x<<devide_type<<x<<debug2_type

其中 devide_type debug1_type debug2_type 可以通过预先 define 的方式定义

否则,debug.h 会定义 devide_type '=',debug1_type ' ',debug2_type '\n'

out(...)

使用 cout 输出,能够使用 cout 输出的内容均可用于 out 函数内

out 函数可以传入不定数量的参数

用法1:用逗号隔开需要输出的内容,如 out(1,2,3,a[1],a[2],'\n')

用法2:使用预定义处理文本

div 分割符

lf 换行

eofl 换行并结束

out(1 div 2 div 3 lf 4 eofl,a[1] div a[2] lf a[3])

ignored(T)

使用此函数来忽略 GCC::-Wunused-result

windows.hpp

  • 仅在 Windows 环境下可用

hdk::windows::compile_code(const string file,const string output_file="",const string compile_setting="-std=c++14 -O2 -Wall",bool display=false)

编译代码

output_file 输出文件,为空则默认使用输入文件名+.exe

compile_setting 编译选项

diplay 显示编译结果

返回编译输出文件名,编译失败返回 "fail"

bool hdk::windows::run_code(const string file,const string output_file="",const string compile_setting="-std=c++14 -O2 -Wall",bool display=true)

编译并运行代码

编译失败返回 false

hdk::windows::local_test(const string create_exe,const string answer_exe,const string test_exe,int test_cases=-1,int time_limit=1000 time_s)

对给定程序执行对拍

请不要在传入程序中使用 freopen 重定向 stdin 或 stdout

create_exe 数据生成程序

answer_exe 答案程序

test_exe 测试程序

test_cases 测试数量,=-1 则无限制

time_limit 时间限制

hdk::windows::local_testcode(const string create_code,const string answer_code,const string test_code,int test_cases=-1,int time_limit=1000 time_s,const string compile_setting="-std=c++14 -O2 -Wall")

编译并运行对拍代码

请不要在传入代码中使用 freopen 重定向 stdin 或 stdout

hdk::scbc(char/std::string put,int color)

以给定颜色代码输出文字

颜色代码详见 system("color")

hdk::set_Flush()

停止向控制台输出内容,将输出内容存入第二缓冲区

hdk::show(int Flush_size)

清空控制台,将第二缓冲区的内容输出到控制台

server.hpp

  • 仅在 Windows 环境下可用

server()

system("msg") 指令的可视化版本

linux.hpp

  • 仅在 Linux 环境下可用

  • 需要 colorlinux.hpp

linux_copyfile(const char*in,const char *out)

将 in 文件复制到 out,若没有 out 文件则新建

linux_printfile(const char*in)

输出文件内容到控制台

linux_fc(const char *file_A,const char *file_B,bool display=true,bool debug_mode=false)

文本比较,display=true 则在控制台显示结果,debug_mod=true 则显示更详细的比较信息

发现不同则会返回 true

colorlinux.hpp

Fileheader 1.13.1 - ColorLinux

hct.h

HCT 使用教程

posted @ 2024-09-29 16:01  HaneDaniko  阅读(17)  评论(0编辑  收藏  举报