[问题] 关于使用范本templete的小问题

楼主: TMDTMD2487 (ㄚ冰)   2018-07-28 15:07:59
开发平台(Platform): (Ex: Win10, Linux, ...)
win10
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
vc++
问题(Question):
我今天有两种资料群AB要分别依照他们的priority用heap做排班
两种资料用struct大概这样
struct A ( (typeA1 data1) , ... , (int p) )
struct B ( (typeB1 data1) , ... , (int p) )
(除了各自都有权重其他资料型态都不尽相同
我想说做一个heap的范本方便处理这两种资料群的排班,如下:
template <class type>
class max_heap{...}
private中有阵列作为heap,如: type data[heap_size]
那像是insert大致会像是下面这样:
template <class type>
void max_heap<type>::insert(type _data){
data[current_size+1]=_data;
current_size++;
... ... 然后根据"data[current_size].p"去做heap调整
}
把 范本默认的资料型态 预想成 含整数p的struct 然后操作,原本以为会出问题的
不过编译执行好像都可以,然后查了一下别人用template的一些例子
都是放很单纯的int...之类的,没看过把struct定义的放进去用
我想问的只是这是个好方法吗? 还是通常都是针对各种资料去建立各自的heap class
作者: ilikekotomi (Young)   2018-07-28 16:12:00
有不同struct这样写没错 C++有heap的算法应该可以跟vector一起用 不用自己写heap的实作只要你的struct可以比较大小就可以用了
作者: LPH66 (-6.2598534e+18f)   2018-07-28 19:59:00
C++ 的 template 满常这样假设 template class 型别具有某些特定的字段或 typedef 或等等由于实际程式都是在(以各种方法)给定所有型别之后才会编译因此只要给定之后程式合法那就没问题了相对的如果没有 (例如此例中结构中不含 p 但却 .p 存取)那就会出现普通的编译错误

Links booklink

Contact Us: admin [ a t ] ucptt.com