[問題] 關於使用範本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