2012-09-12 119 views
0

是我多向優先級隊列實現代碼多向優先級隊列實現

#include<iostream> 
#include<vector> 
using namespace std; 
template<class T> 
class pq 
{ 
    int d,n; 
    vector<int>pq; 
    vector<int>qp; 
    const vector<T>&a; 
    void exch(int i,int j) 
    { 
     int t=pq[i]; 
     pq[i]=pq[j]; 
     pq[j]=t; 
     qp[pq[i]]=i; 
     qp[pq[j]]=j; 
    } 

    void fixup(int k) 
    { 
     while(k>1 && a[pq[(k+d-2)/d]]>q[pq[k]]) 
     { 
      exch(k,(k+d-2)/d); 
      k=(k+d-2)/d; 
     } 
    } 

    void fixdown(int k,int n) 
    { 
     int j; 
     while((j=d*(k-1)+2)<=n) 
     { 
      for(int i=j+1;i<j+d&& i<=n;i++) 
       if(a[pq[j]]>a[pq[i]]) 
        j=i; 
      if(!(a[pq[k]]>a[pq[j]])) 
       break; 
      exch(k,j); 
      k=j; 
     } 
    } 

public: 
    pq(int n,const vector<T>&a,int d=3):a(a),pq(n+1,0),qp(n+1,0),n(0),d(d){} 

    int empty() const 
    { 
     return n==0; 
    } 

    void insert(int v) 
    { 
     pq[++n]=v ; 
     qp[v]=n; 
     fixup(n); 
    } 

    int getmin() 
    { 
     exch(1,n); 
     fixdown(1,n-1); 
     return pq[--n]; 
    } 

    void lower(int k) 
    { 
     fixup(qp[k]); 
    } 
}; 

int main() 
{ 
    return 0; 
} 

但是它有一些缺陷,即我已經取得了一些incorrected構造,這裏的兩個錯誤,我看的時候運行代碼

1>c:\users\\documents\visual studio 2012\projects\multiway_heap\multiway_heap\multiway_heap.cpp(8): error C2461: 'pq<T>' : constructor syntax missing formal parameters 
1>   c:\users\\documents\visual studio 2012\projects\multiway_heap\multiway_heap\multiway_heap.cpp(68) : see reference to class template instantiation 'pq<T>' being compiled 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========= 

所以請幫助我明白的地方是錯誤

+1

我剛剛改進了格式。請注意,如果您希望其他人能夠讀取它,則不應編寫太緊湊的代碼。 – SirDarius

+0

感謝您的編輯 –

回答

3

試圖瞭解編譯器告訴你 - 它並不難。

class pq 
{ 
/* ... */ 
    vector<int> pq; // I suppose this is line 8 according to compiler error 

您正在爲您的班級模板及其成員使用相同的名稱。這在C++中是不合法的。